Eliminar la leyenda ggplot 2.2

250

Estoy tratando de mantener la leyenda de una capa (suave) y eliminar la leyenda de la otra (punto). He intentado apagar las leyendas con guides(colour = FALSE)y geom_point(aes(color = vs), show.legend = FALSE).

Editar : como esta pregunta y sus respuestas son populares, un ejemplo reproducible parece en orden:

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í

Chico
fuente
55
Un ejemplo reproducible mínimo sería mucho más simple. En la larga línea de código parece haber un montón de código innecesario (para el problema en cuestión), además de ser completamente irreproducible como está escrito actualmente.
mnel
Posible duplicado de Desactivar algunas leyendas en un ggplot
Umaomamaomao

Respuestas:

445

del libro de cocina r , donde bp es tu ggplot:

Eliminar la leyenda de una estética particular (relleno):

bp + guides(fill=FALSE)

También se puede hacer al especificar la escala:

bp + scale_fill_discrete(guide=FALSE)

Esto elimina todas las leyendas:

bp + theme(legend.position="none")
usuario3490026
fuente
25
Como respuesta a un comentario de @Alex: Tenga en cuenta que theme_bw()puede interferir con cualquier definición realizada con theme(). Cuando lo use theme_bw(), asegúrese de agregarlo a la trama antes de modificar cualquier otra opción de tema.
fabern
1
pero cuando hago algo como esto bp + theme(legend.position="none") + theme_classic(), las leyendas regresan. Entonces, ¿cómo eliminarlo?
loveR
3
@loveR pone primero theme_classic:bp + theme_classic() + theme(legend.position="none")
hipótesis
1
Esto no tuvo ningún efecto en mi trama. Usé el enfoque de @Tjebo con éxito.
James Hirschorn
80

Puede haber otra solución para esto:
su código fue:

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
fuente
3
Este es un enfoque muy agradable. Más intuitivo también.
patL
2
Esta fue la solución que funcionó para eliminar letras de la leyenda cuando usé geom_text para anotar líneas en color. No hay scale_labelcomando (ni esto tiene sentido), y guide(label = FALSE)tampoco funcionó. ¡Gracias!
Melissa Key el
45

Como la pregunta y la respuesta del usuario 3490026 son un éxito de búsqueda superior, he hecho 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 ggplot2sí es confusa es que combina automáticamente ciertas leyendas cuando están asociadas con la misma variable. Por ejemplo, factor(gear)aparece dos veces, una vez linetypey una vez para fill, lo que resulta en una leyenda combinada. Por el contrario, geartiene su propia entrada de leyenda ya que no se trata igual que factor(gear). Las soluciones ofrecidas hasta ahora suelen funcionar bien. Pero ocasionalmente, es posible que deba anular las guías. Vea mi último ejemplo al final.

# 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 = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

Desactiva las 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() 

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

p + guides(fill = FALSE)

Igual que el anterior a través de la función scale_fill_:

p + scale_fill_discrete(guide = FALSE)

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 fuera de los ad-hoc post-hoc

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

ingrese la descripción de la imagen aquí

PatrickT
fuente
2
Acabo de notar que el color de relleno azul en el último gráfico no aparece en el gráfico, no estoy seguro de por qué ...
PatrickT
Escriba warnings()después de ejecutar su código y verá los motivos por los que no se muestra la cinta azul.
markus
@markus: ¡Gracias! No me molestaré en editar el ejemplo, ya que el problema está separado. Sin embargo, tiene poco sentido tener una leyenda para secuando no se computa. Probablemente valga la pena un problema en Github, pero no tengo la energía en este momento ...
PatrickT
13

Si su gráfico usa ambos filly colorestética, puede eliminar la leyenda con:

+ guides(fill=FALSE, color=FALSE)
duhaime
fuente