eliminar el título de la leyenda en ggplot

111

Estoy tratando de eliminar el título de una leyenda en ggplot2:

df <- data.frame(
  g = rep(letters[1:2], 5),
  x = rnorm(10),
  y = rnorm(10)
)

library(ggplot2)
ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom")

ingrese la descripción de la imagen aquí

He visto esta pregunta y ninguna de las soluciones allí parece funcionar para mí. La mayoría da un error sobre cómo optsestá obsoleto y cómo utilizarlo themeen su lugar. También he intentado varias versiones de theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank), mensajes, etc. error típico son:

'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)
'theme_blank' is deprecated. Use 'element_blank' instead. (Deprecated; last used in version 0.9.1)

Lo estoy usando ggplot2por primera vez desde que se lanzó la versión 0.9.3 y me resulta difícil navegar por algunos de los cambios ...

smillig
fuente
5
Puede usar labs()para esto: Agregue la línea labs(colour = "")a su código que produjo el gráfico anterior.
Dennis

Respuestas:

191

Casi estabas ahí: solo agrega theme(legend.title=element_blank())

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank())

Esta página de Cookbook for R ofrece muchos detalles sobre cómo personalizar las leyendas.

juba
fuente
2
Esto eliminará todos los títulos de leyenda. Para un control más local, el guide = guide_legend()comando funciona. Para eliminar el título de la leyenda de relleno, pero para mantener el título de la leyenda de color, por ejemploscale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
PatrickT
9

Esto también funciona y también demuestra cómo cambiar el título de la leyenda:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")
Roland
fuente
7
Esto reemplaza el título con una cadena vacía y, por lo tanto, genera un espacio adicional entre la etiqueta y el cuadro de la leyenda, que sería visible solo si la leyenda tuviera un cuadro o un fondo de un color diferente de donde está colocada. Por lo tanto, está bien para un enfoque rápido y listo en casos simples como, theme_bw()pero no el mejor, en los casos en que la leyenda tiene un cuadro alrededor y está ubicada en algún lugar del área de la trama (mi enfoque habitual).
PatrickT
1
+1 para la observación. Tuve el problema al usar dos leyendas diferentes y el espacio en blanco entre ellas que fue creado por la solución anterior. La configuración scale_color_manual(name=element_blank())+de la leyenda inferior me
resolvió
@joaoal, element_blank()parece ser el enfoque recomendado. La configuración name = NULL es otra forma.
PatrickT
1

Otra opción para usar labsy configurar el color NULL.

ggplot(df, aes(x, y, colour = g)) +
  geom_line(stat = "identity") +
  theme(legend.position = "bottom") +
  labs(colour = NULL)

ingrese la descripción de la imagen aquí

mpalanco
fuente
0

Para Error: 'opts' is deprecated. Úselo en su theme()lugar. (Desaparecido; usado por última vez en la versión 0.9.1) 'Reemplacé opts(title = "Boxplot - Candidate's Tweet Scores")con labs(title = "Boxplot - Candidate's Tweet Scores"). ¡Funcionó!

Shradha Shiwani
fuente
0

Dado que puede tener más de una leyenda en una trama, una forma de eliminar selectivamente solo uno de los títulos sin dejar un espacio vacío es establecer el nameargumento de la scale_función en NULL, es decir

scale_fill_discrete(name = NULL)

(felicitaciones a @pascal por un comentario en otro hilo )

vkehayas
fuente