2014-11-06 22 views
5

Mam trudności z wyrównaniem tekstu legendy w lewo.Wyrównaj tekst legendy w 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") 

Z tego kodu jest automatycznie wyrównanie do lewej

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

jednak z po alignemt jest do centrum.

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]))) 

Jak mogę osiągnąć lewe wyrównanie z ostatnim scenariuszem?

Odpowiedz

5

musisz określić legend.text.align w 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) 

Alternatywnie, można użyć bquote zamiast expression i domyślne wyrównanie do lewej odbywa. Nie wiem, dlaczego po prostu użycie expression zmienia wyrównanie w prawo ...

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

Dziękuję za odpowiedź. Domyślam się, że wartość domyślna musi pozostać wyrównana, ponieważ pierwszy kod automatycznie tworzy legendę wyrównaną do lewej. Dlaczego drugi skrypt spowodował wyśrodkowany/prawy wydruk wyjściowy? W jakich sytuacjach muszę dodać "theme (legend.text.align = 0)"? – Meso

+1

Cóż, krótka odpowiedź byłaby, gdyby tekst nie był wyrównany w lewo :) Nie wiem, dlaczego w tym przypadku wyrównanie nie jest po lewej, co jest domyślne. Powód, dla którego twój skrypt wyprowadza wyrównane do prawej strony dane wyjściowe, ma związek z użyciem wyrażeń, jeśli używasz bquote zamiast tego używane jest domyślne wyrównanie lewe - zobacz aktualizację – konvas

Powiązane problemy