Wyłączanie niektórych legend w ggplot

221

Załóżmy, że mam ggplot z więcej niż jedną legendą.

mov <- subset(movies, length != "")
(p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()
)

Mogę wyłączyć wyświetlanie wszystkich legend w ten sposób:

(p1 <- p0 + theme(legend.position = "none"))

Przejście show_guide = FALSEdo geom_point(jak na to pytanie ) wyłącza legendę kształtu.

(p2 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point(show_guide = FALSE)
)

Ale co jeśli zamiast tego chcę wyłączyć legendę kolorów? Wydaje się, że nie ma sposobu, aby powiedzieć, do show_guidektórej legendy zastosować swoje zachowanie. I nie ma show_guideargumentów za skalami ani estetyką.

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  scale_colour_discrete(show_guide = FALSE) +
  geom_point()
)
# Error in discrete_scale

(p4 <- ggplot(mov, aes(year, rating, shape = mpaa)) +
  aes(colour = length, show_guide = FALSE) +
  geom_point()
)
#draws both legends

To pytanie sugeruje, że nowoczesnym (od ggplot2 v0.9.2) sposobem kontrolowania legend jest guidesfunkcja.

Chcę być w stanie zrobić coś takiego

p0 + guides(
  colour = guide_legend(show = FALSE) 
)

ale guide_legendnie ma argumentu show.

Jak określić, które legendy mają być wyświetlane?

Richie Cotton
źródło
6
Po ostatniej ggplot2aktualizacji show_guidezostał wycofany i zastąpiony przez show.legend.
PatrickT,

Odpowiedzi:

294

Można użyć guide=FALSEw scale_..._...()celu powstrzymania legendy.

W swoim przykładzie powinieneś użyć, scale_colour_continuous()ponieważ lengthjest zmienną ciągłą (nie dyskretną).

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
   scale_colour_continuous(guide = FALSE) +
   geom_point()
)

Lub za pomocą funkcji guides()należy ustawić FALSEdla tego elementu / estetycznej, które nie chcą się pojawiać jako legendy, na przykład fill, shape, colour.

p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()    
p0+guides(colour=FALSE)

AKTUALIZACJA

Oba dostarczone rozwiązania działają w nowej ggplot2wersji 2.0.0, ale movieszestaw danych nie jest już obecny w tej bibliotece. Zamiast tego musisz użyć nowego pakietu, ggplot2moviesaby sprawdzić te rozwiązania.

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")
Didzis Elferts
źródło
6
Scale_colour_continuous (guide = FALSE) nie działa w ggplot2 0.9.3, ale prowadnice (color = FALSE) rozwiązują problem. Wielkie dzięki Didzis!
Nikolay Nenov
1
@NikolayNenov Dziwne, ponieważ oba rozwiązania działają dla mnie z ggplot2 0.9.3.1
Didzis Elferts
9
Chcę usunąć legendę alfa . guides(alpha=FALSE)Zrób sztuczkę. Dziękuję Didzis.
l0o0
3
Uwaga do siebie: jeśli masz a, geom_linerange()a legenda pokazuje krzyż zamiast linii, wstaw do show.legend=FALSEśrodka geom_linerange().
PatrickT
25

Możesz po prostu dodać show.legend=FALSEdo geom, aby ukryć odpowiednią legendę

fc9.30
źródło