Desativando algumas lendas em um ggplot

221

Suponha que eu tenha um ggplot com mais de uma legenda.

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

Eu posso desligar a exibição de todas as lendas como esta:

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

Passar show_guide = FALSEpara geom_point(conforme esta pergunta ) desativa a legenda da forma.

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

Mas e se eu quiser desativar a legenda das cores? Não parece haver uma maneira de dizer a show_guidequal lenda aplicar seu comportamento. E não há show_guideargumento para escalas ou estética.

(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

Esta pergunta sugere que a maneira moderna (desde ggplot2 v0.9.2) de controlar legendas está com a guidesfunção

Eu quero ser capaz de fazer algo como

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

mas guide_legendnão tem argumento de show.

Como especifico quais legendas são exibidas?

Richie Cotton
fonte
6
Após uma ggplot2atualização recente , show_guidefoi preterido e substituído por show.legend.
PatrickT

Respostas:

294

Você pode usar na lenda suprimir.guide=FALSEscale_..._...()

Para o seu exemplo, você deve usar scale_colour_continuous()porque lengthé uma variável contínua (não discreta).

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

Ou utilizando a função guides()você deve definir FALSEpara esse elemento / estética que você não deseja que apareça como lenda, por exemplo, fill, shape, colour.

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

ATUALIZAR

As duas soluções fornecidas funcionam na nova ggplot2versão 2.0.0, mas o moviesconjunto de dados não está mais presente nesta biblioteca. Em vez disso, você precisa usar um novo pacote ggplot2moviespara verificar essas soluções.

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")
Didzis Elferts
fonte
6
O scale_colour_continuous (guide = FALSE) não funciona no ggplot2 0.9.3, mas os guias (color = FALSE) resolvem o problema. Muito obrigado Didzis!
Nikolay Nenov
1
@NikolayNenov estranho, porque ambas as soluções funciona para mim com ggplot2 0.9.3.1
Didzis Elferts
9
Eu quero remover a legenda do alfa . guides(alpha=FALSE)Faça o truque. Obrigado, Didzis.
L0o0:
3
Nota para si mesmo: se você tiver um geom_linerange()e a legenda estiver mostrando uma cruz em vez de uma linha, insira show.legend=FALSEdentro do geom_linerange().
precisa saber é o seguinte
25

Você pode simplesmente adicionar show.legend=FALSEao geom para suprimir a legenda correspondente

fc9.30
fonte