¿Cómo puedo eliminar el título de la leyenda en ggplot2?

Tengo una pregunta sobre la leyenda en ggplot2.

Supongamos que tengo un conjunto de datos hipotético sobre la longitud media de la zanahoria para dos colores diferentes en dos granjas:

carrots<-NULL
carrots$Farm<-rep(c("X","Y"),2)
carrots$Type<-rep(c("Orange","Purple"),each=2)
carrots$MeanLength<-c(10,6,4,2)
carrots<-data.frame(carrots)

Hago un diagrama de barras simple:

require(ggplot2)
p<-ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
geom_bar(position="dodge") +
opts(legend.position="top")
p

Mi pregunta es: ¿hay alguna manera de eliminar el título ('Tipo') de la leyenda?

¡Gracias!

preguntado el 16 de mayo de 11 a las 20:05

6 Respuestas

Puede modificar el título de la leyenda pasándolo como primer parámetro a una escala. Por ejemplo:

ggplot(carrots, aes(y=MeanLength, x=Farm, fill=Type)) + 
  geom_bar(position="dodge") +
  theme(legend.position="top", legend.direction="horizontal") +
  scale_fill_discrete("")

También hay un atajo para esto, es decir labs(fill="")

Dado que su leyenda está en la parte superior del gráfico, es posible que también desee modificar la orientación de la leyenda. Puedes hacer esto usando opts(legend.direction="horizontal").

enter image description here

respondido 14 mar '14, 00:03

Gracias @Andrie, funcionó a la perfección. Es interesante que hayas mencionado legend.direction = "horizontal". Quería hacer esto, pero no funcionó en la antigua versión R que he estado usando en mi vieja computadora portátil (R 2.11.1, la culpa es mía), ¡pero la función parece estar funcionando en R 2.13.1! - susjoh

usar NULL en lugar de "" no intenta dibujar el título en absoluto, de lo contrario, hay demasiado espacio donde estaría el título cuando el cuadro de leyenda está visible - pascal

Descubrí que la mejor opción es usar + theme(legend.title = element_blank()) como señaló el usuario "gkcn".

Para mí (el 03/26/15) usando el sugerido anteriormente labs(fill="") y scale_fill_discrete("") elimine un título, solo para agregar otra leyenda, lo cual no es útil.

respondido 26 mar '15, 20:03

la mejor respuesta, porque name = "" simplemente ponga un espacio en blanco y scale_manual es más una respuesta general - Sergio

Esto funcionó para mí. Los otros no lo hicieron porque agregaron una leyenda adicional. - Andrew Kirk

Puedes usar labs:

p + labs(fill="")

ejemplo de trama

contestado el 17 de mayo de 11 a las 09:05

Habrá espacios en blanco donde solía estar el título, use la respuesta de Yuriy si no quiere espacios en blanco. - Hamburguesa Gerhard

La única forma que funcionó para mí fue usar legend.title = theme_blank() y creo que es la variante más conveniente en comparación con labs(fill="") y scale_fill_discrete(""), que también podría ser útil en algunos casos.

ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
geom_bar(position="dodge") +
opts(
    legend.position="top",
    legend.direction="horizontal",
    legend.title = theme_blank()
)

PD: Hay opciones más útiles en documentación.

Respondido 25 ago 11, 14:08

opts () y theme_blank están obsoletos ahora. Utilice: "+ theme (legend.title = element_blank ())" en su lugar. - gkcn

El uso de legend.title = element.blank () sobre las opciones que establecen una cadena vacía es que no hay espacio en blanco adicional sobre la leyenda donde solía estar el título de la leyenda. - Michael Szczepaniak

Ya tienes dos buenas opciones, así que aquí tienes otra que usa scale_fill_manual(). Tenga en cuenta que esto también le permite especificar los colores de las barras fácilmente:

ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
  geom_bar(position="dodge") +
  opts(legend.position="top") +
  scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))

Si está utilizando la versión actualizada (a partir de enero de 2015) de ggplot2 (versión 1.0), lo siguiente debería funcionar:

ggplot(carrots, aes(y = MeanLength, x = Farm, fill = Type)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme(legend.position="top") +
  scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))

Respondido el 08 de enero de 15 a las 21:01

Gracias, @Chase. No solo funcionó, sino que también es la combinación de colores más hermosa que he visto en mi vida :) - susjoh

+1: esta es una opción importante porque cuando se utilizan varias escalas (p. Ej. scale_fill_manual, scale_color_manual, scale_shape_manual), necesitan lo mismo name o aparecerán múltiples leyendas. - Lenna

@Chase, ¿reemplazará esto el título con una cadena vacía de una altura distinta de cero, creando así un espacio vertical en la parte superior del cuadro de leyenda (cuando hay uno) o se comportará como theme(legend.title = element_blank()) y engullir la línea? En mi non-mwe parece que hay espacio extra, pero podría estar pasando algo más. - PatrickT

@PatrickT - buena pregunta. Esta respuesta está casi 100% desactualizada en este momento ...opts no se ha utilizado desde 0.9.1, el paquete de balanzas ahora está separado de ggplot2, etc., etc. Volveré y actualizaré esto cuando tenga la oportunidad, pero tengo la corazonada de que tu sugerencia es probablemente la solución preferida hoy. Siéntase libre de editar mi respuesta en consecuencia si lo prueba y funciona. - persecución

@PatrickT: esa es una pregunta muy justa, y una para la que no creo tener la respuesta ... probablemente algo en lo que la comunidad de R aquí debería pensar y llegar a una resolución ... a menudo me encuentro este mismo problema, ya que encuentro mis propias respuestas de hace más de 3 años cuando busco cómo hacer algo ahora ... ¡se vuelve frustrante! - persecución

La solución de @pascal en una comentario establecer el name argumento de una función de escala, como scale_fill_discrete, NULL, es la mejor opción para mí. Permite quitar el título junto con el espacio en blanco que quedaría si usaras "", mientras que al mismo tiempo permite al usuario eliminar títulos de forma selectiva, lo que no es posible con el theme(legend.title = element_blank()) enfoque.

Dado que está enterrado en un comentario, lo publico como una respuesta para aumentar potencialmente su visibilidad, con felicitaciones a @pascal.

TL; DR (para copiadoras):

scale_fill_discrete(name = NULL)

Respondido el 05 de junio de 20 a las 13:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.