Apagando algunas leyendas en un ggplot

221

Supongamos que tengo un ggplot con más de una leyenda.

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

Puedo apagar la visualización de todas las leyendas como esta:

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

Pasar show_guide = FALSEa geom_point(según esta pregunta ) desactiva la leyenda de la forma.

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

Pero, ¿qué pasa si quiero desactivar la leyenda de color en su lugar? No parece haber una manera de decir a show_guidequé leyenda aplicar su comportamiento. Y no hay show_guideargumento para las escalas o la 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 pregunta sugiere que la forma moderna (desde ggplot2 v0.9.2) de controlar las leyendas es con la guidesfunción.

Quiero poder hacer algo como

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

pero guide_legendno tiene un argumento show.

¿Cómo especifico qué leyendas se muestran?

Algodón Richie
fuente
66
Después de una ggplot2actualización reciente , show_guideha quedado obsoleto y reemplazado por show.legend.
PatrickT

Respuestas:

294

Se puede utilizar guide=FALSEen scale_..._...()la leyenda de supresión.

Para su ejemplo, debe usar scale_colour_continuous()porque lengthes una variable continua (no discreta).

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

O el uso de la función guides()que debe establecer FALSEpara ese elemento / estética que no desea que aparezca como leyenda, por ejemplo, fill, shape, colour.

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

ACTUALIZAR

Ambas soluciones proporcionadas funcionan en la nueva ggplot2versión 2.0.0, pero el moviesconjunto de datos ya no está presente en esta biblioteca. En su lugar, debe usar un nuevo paquete ggplot2moviespara verificar esas soluciones.

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")
Didzis Elferts
fuente
66
Scale_colour_continuous (guide = FALSE) no funciona en ggplot2 0.9.3 pero guías (color = FALSE) resuelve el problema. Muchas gracias Didzis!
Nikolay Nenov
1
@NikolayNenov Extraño, porque ambas soluciones funcionan para mí con ggplot2 0.9.3.1
Didzis Elferts
99
Quiero eliminar la leyenda de alfa . guides(alpha=FALSE)Haz el truco. Gracias Didzis.
l0o0
3
Nota personal: si tiene una geom_linerange()y la leyenda muestra una cruz en lugar de una línea, inserte show.legend=FALSEdentro de geom_linerange().
PatrickT
25

Simplemente puede agregar show.legend=FALSEa geom para suprimir la leyenda correspondiente

fc9.30
fuente