2012-07-30 27 views
61

Mam prostą ramkę danych, którą próbuję zrobić połączony wykres liniowy i punktowy przy użyciu ggplot2. Przypuśćmy moich danych wygląda następująco:Usuń dodatkowe legendy w ggplot2

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
       group=c(rep("a",10),rep("b",10))) 

I Próbuję dokonać działki:

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8)) 
g 

wynik wygląda dobrze z jednym wyjątkiem. Ma dodatkową legendę przedstawiającą warstwę alfa dla mojej warstwy geom_point.

Extra Legend for geom_point transparency

Jak mogę utrzymać legendę pokazano kolory grupie, ale nie taki, który pokazuje moje ustawienia alfa?

Odpowiedz

123

Estetyka może być ustawić lub odwzorowane ciągu ggplot rozmowy.

  • estetyczny zdefiniowane w aes(...) jest odwzorowywane z danymi i legenda utworzony.
  • Estetyczny może być również zestaw do pojedynczej wartości, definiując go poza aes().

W tym przypadku, wydaje się chcesz ustawićalpha = 0.8 i mapęcolour = group.

Aby to zrobić,

Umieść alpha = 0.8 poza definicją aes().

g <- ggplot(df, aes(x = x, y = y, group = group)) 
g <- g + geom_line(aes(colour = group)) 
g <- g + geom_point(aes(colour = group), alpha = 0.8) 
g 

enter image description here

Dla każdego odwzorowane zmienną można wyciszyć wygląd legendy za pomocą guide = 'none' w odpowiednim scale_... rozmowy. na przykład.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
     geom_line(aes(colour = group)) + 
     geom_point(aes(colour = group, alpha = 0.8)) 
g2 + scale_alpha(guide = 'none') 

Który powróci identyczną fabułę

EDIT @ komentarzu Jøran jest spot-on, zrobiłem moją odpowiedź pełniejsze

+12

Jest to właściwa metoda, ponieważ PO jest ustawienie zamiast mapowania estetyczne, ale w ogóle można stłumić wygląd każdej legendzie pomocą czegoś podobnego 'g + scale_alpha (przewodnik =„none”)'. – joran

+0

Rzeczywiście. Odpowiedź została rozwinięta. Bardziej sensowne jest posiadanie kompleksowej odpowiedzi, a nie tylko konkretnej kwestii PO. – mnel

+4

Dziękuję bardzo za dodatkowe wyjaśnienie. To bardzo pomaga mi zrozumieć filozofię ggplota. – Wilduck

0

Dla starszych wersji ggplot2 (wersje przed 0,9 .2, wydany pod koniec 2012 roku), ta odpowiedź powinna zadziałać:

Próbowałem tego z colour_scale i nie działało. Wygląda na to, że element colour_scale_hue działa jak funkcja z domyślnym parametrem TRUE. Dodałem scale_colour_hue(legend=FALSE) i zadziałało.

Nie jestem pewien, czy to jest w przypadku wszystkich pozycji skali kolorów w ggplot

+3

Użycie 'legendy' w wywołaniu' scale_ * 'jest przestarzałe, lepiej zrobić' scale_colour_hue (guide = "none") '. – Gregor

+2

biorąc pod uwagę, że "legend = FALSE" jest przestarzałe, jak wskazano w komentarzu @shujaa, jest to w rzeczywistości duplikat odpowiedzi, tj. Dodanie funkcji 'guide =" none "' do funkcji 'scale_fill/color *'. –

13

Wystarczy dodać kod show.legend = F po części, w której nie ma go.

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F) 
Powiązane problemy