2013-12-15 12 views
21

Moim celem jest wykonanie kilku wykresów za pomocą ggplot i połączenie ich w jeden dział z użyciem grid.arrange w pakiecie gridExtra.Zmniejszanie rozmiaru legendy w ggplot poza domyślny rozmiar

Mam problem polegający na tym, że legendy w moim ggplot (o odpowiednim rozmiarze dla pojedynczej działki) są zbyt duże, gdy próbuję umieścić działki obok siebie z grid.arrange. Wynikowe połączone wykresy zmniejszają oś X, ale zachowują oryginalny rozmiar legendy. Rezultatem jest bardzo chuda fabuła, obok niepotrzebnie dużej legendy. Chciałbym zmniejszyć rozmiar legendy na każdym poletku, na tyle, aby móc umieścić moje poletka obok siebie. Ewentualnie zredukujcie je na tyle, aby wprowadzić je w rzeczywistą fabułę bez narzucania się.

V1<-rnorm(10) 
V2<-rnorm(10) 
V3<-rnorm(10) 
DF<-data.frame(V1,V2,V3) 


ggplot(DF,aes(x=V1,y=V2,size=V3))+ 
geom_point(fill='red',shape=21)+ 
theme_bw()+ 
scale_size(range=c(5,20)) 

To polecenie fabuły generuje standardowy rozmiar legendy po prawej stronie wykresu.

enter image description here

Próbowałem przy użyciu różnych elementów tematycznych:

+theme(legend.key.size = unit(0.5, "cm") 

lub

+theme(legend.key.width=unit(0.3,"cm"),legend.key.height=unit(0.3,"cm"),legend.position = c(0.7, 0.8)) 

I choć mogę się legenda większy pomocą tych poleceń tematu, nie mogę aby legenda była mniejsza niż domyślna legenda. Czy istnieje jakiś sposób, aby zmniejszyć legendę poza domyślny rozmiar?

Mogę również zmienić domyślny rozmiar mojego urządzenia pdf, aby był szerszy i dostosować się do dużych legend, ale na razie chciałbym pracować ze standardowym rozmiarem pdf.

Odpowiedz

19

Celem legendy jest mapowanie estetyki na działce (np. Kolor, wypełnienie, kształt lub rozmiar) do poziomów określonych w legendzie. Parametry dostosowują rozmiar ramki otaczającej element legendy. Dzięki kolorom, wypełnieniu i kształtowi elementy legendy mogą być tak małe, jak tylko chcesz, ale przy rozmiarze rozmiar elementu informuje o tym, które bąbelki odpowiadają danemu elementowi legendy, więc elementy legendy muszą mieć rozmiary, które odpowiadają do tego, co jest na działce.

Oto trzy możliwości, które mogą pomóc:

Wariant 1: umieścić legendę wewnątrz działki.

ggplot(DF,aes(x=V1,y=V2,size=V3))+ 
    geom_point(fill='red',shape=21)+ 
    theme_bw()+ 
    scale_size(range=c(5,20))+ 
    theme(legend.justification=c(1,0), legend.position=c(1,0)) 

Opcja 2: Wykorzystanie facet_wrap(...) jeśli możesz. W ten sposób otrzymasz tylko jedną legendę dla zestawu działek.

Opcja 3: Użyj koloru i rozmiaru, a następnie całkowicie ukryj legendę rozmiaru.

ggplot(DF,aes(x=V1,y=V2,size=V3, color=V3))+ 
    geom_point(shape=19)+ 
    theme_bw()+ 
    scale_size(range=c(5,20), guide="none")+ 
    scale_color_gradient(high="#ff0000", low="#ffffcc") 

Powiązane problemy