2012-07-30 20 views
61

Tengo un marco de datos simple que estoy tratando de hacer un gráfico combinado de líneas y puntos usando ggplot2. Suponiendo que mis datos se ve así:Eliminar leyendas adicionales en ggplot2

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
       group=c(rep("a",10),rep("b",10))) 

Y yo estoy tratando de hacer una gráfica:

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8)) 
g 

El resultado se ve bien con una excepción. Tiene una leyenda extra que muestra el alfa para mi capa geom_point.

Extra Legend for geom_point transparency

¿Cómo puedo mantener la leyenda que muestra los colores del grupo, pero no el que muestra la configuración de mi alfa?

Respuesta

123

la estética puede ser ajustado o mapeados dentro de una llamada ggplot.

  • Una estética definida dentro aes(...) es asignada partir de los datos, y una leyenda creados.
  • Una estética también puede ser conjunto a un valor único, definiéndolo fuera de aes().

En este caso, parece que desea establecer alpha = 0.8 y mapacolour = group.

Para ello,

Coloque el alpha = 0.8 fuera de la definición aes().

g <- ggplot(df, aes(x = x, y = y, group = group)) 
g <- g + geom_line(aes(colour = group)) 
g <- g + geom_point(aes(colour = group), alpha = 0.8) 
g 

enter image description here

Para cualquier mapeados variable que puede suprimir la aparición de una leyenda utilizando guide = 'none' en el scale_... llamada adecuada. p.ej.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
     geom_line(aes(colour = group)) + 
     geom_point(aes(colour = group, alpha = 0.8)) 
g2 + scale_alpha(guide = 'none') 

que devolverá una trama idéntica

EDITAR @ comentario de Joran es el lugar, he tomado una respuesta más amplia

+12

Este es el método correcto, ya que el PO está fijando en lugar de la cartografía de una estética, pero en general se puede suprimir la aparición de cualquier leyenda usando algo como 'g + scale_alpha (guía = "none")'. – joran

+0

De hecho. La respuesta ha sido elaborada. Tiene más sentido tener una respuesta integral, no solo específica para el problema de OP. – mnel

+4

Muchas gracias por la explicación agregada. Esto ayuda mucho a ayudarme a comprender la filosofía de ggplot. – Wilduck

0

Para las versiones antiguas de ggplot2 (versiones anteriores a la 0.9 .2, lanzado a finales de 2012), esta respuesta debería funcionar:

Intenté esto con un colour_scale y no funcionó. Parece que el elemento colour_scale_hue funciona como una función con un parámetro predeterminado TRUE. Agregué scale_colour_hue(legend=FALSE) y funcionó.

no estoy seguro de si este es el caso para todos los elementos de la escala de color en ggplot

+3

El uso de 'legend' en una llamada' scale_ * 'está en desuso, mejor que hacer' scale_colour_hue (guide = "none") '. – Gregor

+2

teniendo en cuenta que 'legend = FALSE' está en desuso, como lo señala @shujaa comment, esta es efectivamente una respuesta duplicada, es decir, para agregar el' guide = "none" 'a una función' scale_fill/color * '. –

13

Sólo tiene que añadir el código show.legend = F después de la parte en la que no lo desee.

g <- ggplot(df, aes(x=x, y=y, group=group)) 
g <- g + geom_line(aes(colour=group)) 
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F) 
Cuestiones relacionadas