2013-05-03 23 views
61

Mam kreślenia linii z ggplot2 tak:kontrola ggplot2 legenda wygląd bez wpływu na fabułę

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw() 

current plot.

Znaki z legend są małe, więc chcę, aby były większe. Jeśli zmienić rozmiar, linie na wykresie zmiany zbyt:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw() 

thick plot lines.

Ale chcę tylko zobaczyć grube linie w legendzie, chcę, żeby linie na wykresie były cienkie. Próbowałem użyć legend.key.size ale zmienia kwadrat znakiem, a nie szerokość linii:

library(grid) # for unit 
ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw() + theme(legend.key.size=unit(1,"cm")) 

big legend keys

Próbowałem również użyć punktów:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + geom_point(size=4) + theme_bw() 

ale oczywiście nadal wpływa zarówno fabuły i legendy:

points

Chciałem użyć linii dla wykresu i kropek/punktów dla legendy.

Więc pytam o dwie rzeczy:

  1. Jak zmienić szerokość linii w legendzie nie zmieniając fabułę?
  2. Jak narysować linie na wykresie, ale narysować punkty/kropki/kwadraty w legendzie?

Odpowiedz

92

Aby zmienić szerokość linii tylko w legendzie należy użyć funkcji guides() a następnie do colour= użytku guide_legend() z override.aes= i ustawić size=. To spowoduje przesłonięcie rozmiaru użytego w działce i użyje nowej wartości rozmiaru tylko dla legendy.

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+ 
     guides(colour = guide_legend(override.aes = list(size=3))) 

enter image description here

Aby uzyskać punkty w legendzie i linie na działce obejścia byłoby dodać geom_point(size=0) aby upewnić się, że punkty są niewidoczne, a następnie w guides() ustawić linetype=0 usunąć linie i size=3 uzyskać większe punkty.

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+ 
     geom_point(size=0)+ 
     guides(colour = guide_legend(override.aes = list(size=3,linetype=0))) 

enter image description here

+0

Awesome, dzięki! Tego właśnie potrzebowałem! Jakieś szanse na odpowiedź na moje drugie pytanie? – baltazar

+0

Zaktualizowałem moją odpowiedź –

+2

Czy można to ustawić w motywie? – nate

Powiązane problemy