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í


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

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")

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


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í


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.