Eliminar leyenda ggplot 2.2

Resuelto Guy asked hace 54 años • 0 respuestas

Estoy intentando mantener la leyenda de una capa (suave) y eliminar la leyenda de la otra (punto). Intenté cerrar las leyendas con guides(colour = FALSE)y geom_point(aes(color = vs), show.legend = FALSE).

Editar : Como esta pregunta y sus respuestas son populares, parece necesario un ejemplo reproducible:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

ingrese la descripción de la imagen aquí

Guy avatar Jan 01 '70 08:01 Guy
Aceptado

de r cookbook , donde bp es tu ggplot:

Eliminar leyenda para una estética particular (relleno):

bp + guides(fill="none")

También se puede hacer al especificar la escala:

bp + scale_fill_discrete(guide="none")

Esto elimina todas las leyendas:

bp + theme(legend.position="none")
user3490026 avatar Feb 25 '2016 08:02 user3490026

Podría haber otra solución para esto:
su código era:

geom_point(aes(..., show.legend = FALSE))

Puede especificar el show.legendparámetro después de la aesllamada:

geom_point(aes(...), show.legend = FALSE)

entonces la leyenda correspondiente debería desaparecer

tjebo avatar Nov 01 '2017 14:11 tjebo

Como la pregunta y la respuesta del usuario3490026 son uno de los principales resultados de búsqueda, he creado un ejemplo reproducible y una breve ilustración de las sugerencias hechas hasta ahora, junto con una solución que aborda explícitamente la pregunta del OP.

Una de las cosas que ggplot2hace y que puede resultar confusa es que combina automáticamente ciertas leyendas cuando están asociadas con la misma variable. Por ejemplo, factor(gear)aparece dos veces, una para linetypey otra para fill, lo que da como resultado una leyenda combinada. Por el contrario, geartiene su propia entrada de leyenda, ya que no se trata de la misma manera que factor(gear). Las soluciones ofrecidas hasta ahora suelen funcionar bien. Pero en ocasiones, es posible que necesites anular las guías. Vea mi último ejemplo en la parte inferior.

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

ingrese la descripción de la imagen aquí

Eliminar todas las leyendas: @user3490026

p + theme(legend.position = "none")

Eliminar todas las leyendas: @duhaime

p + guides(fill = "none", color = "none", linetype = "none", shape = "none")

Desactivar leyendas: @Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

Eliminar el relleno para que el tipo de línea sea visible

p + guides(fill = "none")

Igual que arriba a través de la scale_fill_discretefunción:

p + scale_fill_discrete(guide = "none")

Y ahora una posible respuesta a la solicitud del OP:

"para mantener la leyenda de una capa (suave) y eliminar la leyenda de la otra (punto)"

Encienda algunos y desactívelos ad-hoc post-hoc

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = "none", 
           shape = "none")  

ingrese la descripción de la imagen aquí

PatrickT avatar Nov 26 '2018 05:11 PatrickT