2014-11-06 16 views
5

Ho difficoltà ad allineare il testo della legenda a sinistra.Allinea il testo della legenda in ggplot

library(ggplot2) 
library(reshape2) 
o3<- rnorm(1827, 50, 10) 
NO2<- rnorm(1827, 35, 7) 
NOx<- rnorm(1827, 45, 10) 
pm25<- rnorm(1827, 15, 4) 
date<-seq(as.Date('2000-01-01'),as.Date('2004-12-31'),by = 1) 
df<-data.frame(date,o3,NO2,NOx,pm25) 
meltdf <- melt(df,id="date") 

Con questo codice è l'allineamento automatico a fianco

ggplot(meltdf, aes(x = date, y = value, colour =variable)) + geom_smooth() + stat_smooth(method = "gam") 

Tuttavia, con le seguenti l'alignemt è al centro.

ggplot(meltdf, aes(x = date, y = value, colour =variable)) + 
     geom_smooth() + stat_smooth(method = "gam") + 
     scale_color_discrete(name="Pollutant" ,labels = c(expression(O[3]), 
           expression(NO[2]), 
           expression(NO[x]), 
           expression(PM[2.5]))) 

Come è possibile ottenere l'allineamento a sinistra con l'ultimo script?

risposta

5

è necessario specificare legend.text.align in theme():

ggplot(meltdf, aes(x = date, y = value, colour =variable)) + 
geom_smooth() + 
stat_smooth(method = "gam") + 
scale_color_discrete(name="Pollutant", 
    labels = c(expression(O[3]), 
       expression(NO[2]), 
       expression(NO[x]), 
       expression(PM[2.5]))) + 
theme(legend.text.align = 0) 

In alternativa, provare a utilizzare bquote invece di expression, e di default a sinistra l'allineamento avviene. Non so perché usare solo expression cambia l'allineamento a destra ...

ggplot(meltdf, aes(x = date, y = value, colour =variable)) + 
geom_smooth() + 
stat_smooth(method = "gam") + 
scale_color_discrete(name="Pollutant", 
    labels = c(bquote(O[3]), 
       bquote(NO[2]), 
       bquote(NO[x]), 
       bquote(PM[2.5]))) 
+0

Grazie per la risposta. Presumo che il valore predefinito deve essere lasciato allineato poiché il primo codice ha creato automaticamente una legenda allineata a sinistra. Perché il secondo script ha prodotto un output centrato/allineato a destra? In quali situazioni devo aggiungere "theme (legend.text.align = 0)"? – Meso

+1

Beh, la risposta breve sarebbe quando il testo non è allineato a sinistra :) Non so perché in questo caso l'allineamento non è a sinistra, che è l'impostazione predefinita. La ragione per cui il tuo script risulta nell'output allineato a destra ha a che fare con l'uso delle espressioni, se usi bquote invece viene usato l'allineamento di sinistra di default: vedi aggiornamento – konvas

Problemi correlati