2013-10-20 16 views
26

Utilizzando ggplot2 stat_smooth(), sono curioso di sapere come si può regolare la trasparenza della linea di regressione generata. Usando geom_points() o geom_line(), normalmente si imposta un valore per 'alpha', che indica la trasparenza percentuale. Tuttavia, con stat_smooth(), alpha imposta la trasparenza dell'intervallo di confidenza (nel mio esempio di seguito, disattivato - se = FALSE).Regola la trasparenza (alfa) delle righe stat_smooth, non solo la trasparenza dell'intervallo di confidenza

io non riesco a trovare un modo per rendere la retta di regressione (s) una trasparenza inferiore a 1.

tuo consiglio sarebbe meraviglioso.

codice di esempio

library(reshape2) 
df <- data.frame(x = 1:300) 
df$y1 <- 0.5*(1/df$x + 0.1*(df$x-1)/df$x + rnorm(300,0,0.015)) 
df$y2 <- 0.5*(1/df$x + 0.3*(df$x-1)/df$x + rnorm(300,0,0.015)) 
df$y3 <- 0.5*(1/df$x + 0.6*(df$x-1)/df$x + rnorm(300,0,0.015)) 
df <- melt(df, id = 1) 

ggplot(df, aes(x=x, y=value, color=variable)) + 
    geom_point(size=2) + 
    stat_smooth(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), 
       se = FALSE, 
       size = 1.5, 
       alpha = 0.5) 

enter image description here

risposta

40

Per impostare valore alfa solo per la linea è necessario sostituire stat_smooth() con geom_line() e poi all'interno della geom_line() usano gli stessi argomenti in stat_smooth() e inoltre aggiungere stat="smooth" .

ggplot(df, aes(x=x, y=value, color=variable)) + 
    geom_point(size=2) + 
    geom_line(stat="smooth",method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), 
       size = 1.5, 
       linetype ="dashed", 
       alpha = 0.5) 

enter image description here

+0

grazie, lo farò – EconomiCurtis

+0

Solo una nota: con questo metodo, l'intervallo di confidenza è scomparso. Ho postato un'altra domanda al riguardo: http://stackoverflow.com/q/29235114/3871924 – agenis

+0

@Didzis Elferts, sei a conoscenza di una soluzione migliore a questa domanda? Qualche estensione o miglioramento ggplot su questo? – Dan

3

In alternativa che è leggermente più intuitivo - forse creato dal questa risposta - è possibile utilizzare stat_smooth (geom="line"). La busta SE scompare, anche se è possibile aggiungere di nuovo con qualcosa di simile:

geom_smooth (alpha=0.3, size=0, span=0.5) stat_smooth (geom="line", alpha=0.3, size=3, span=0.5) +

La prima riga crea la SE. senza linea (larghezza 0) e la seconda riga aggiunge la linea sopra di essa. La (corrente) documentazione menziona che stat_smooth è per geomi non standard (ad esempio "linea").

+1

Impostando la ** dimensione = 0 **, la linea non scompare più. In alternativa, è possibile utilizzare il parametro ** linetype = 0 ** per tracciare l'errore standard senza la linea liscia. –