remove manually guides ggplot color change r ggplot2 legend-properties

manually - Diferentes claves de leyenda dentro de la misma leyenda en ggplot2



main ggplot in r (2)

Digamos que no necesito una asignación de variable ''adecuada'', pero me gustaría tener claves de leyenda para ayudar a comprender el gráfico. Mis datos reales son similares a los siguientes df

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10)) library(ggplot2) ggplot(df) + geom_line(aes(id, line, colour = "line")) + geom_point(aes(id, points, colour = "points"))

Básicamente, me gustaría que la clave de leyenda relativa a los points sea ​​... solo un punto, sin la línea en el medio. Me acerqué a eso con esto:

library(reshape2) df <- melt(df, id.vars="id") ggplot() + geom_point(aes(id, value, shape = variable), df[df$variable=="points",]) + geom_line(aes(id, value, colour = variable), df[df$variable=="line",])

pero define dos leyendas separadas. Arreglar el segundo código (y tener que remodelar mis datos) también estaría bien, pero preferiría una forma (si existe) de cambiar manualmente cualquier clave de leyenda (y seguir usando el primer enfoque). ¡Gracias!

EDITAR:

gracias @alex, quien actualizó mi memoria sobre el mapeo de variables. Sin embargo, la forma más fácil que tengo hasta ahora es la siguiente (¡muy mal truco!):

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10)) ggplot(df) + geom_line(aes(id, line, colour = "line")) + geom_point(aes(id, points, shape = "points")) + theme(legend.title=element_blank())

que simplemente está ocultando el título de las dos leyendas diferentes .

Otras ideas mas que bienvenidas !!!


No conozco ninguna forma de hacer esto fácilmente, pero puede hacer una versión de pirateo como esta (usando su marco de datos fundido):

p <- ggplot(df.m, aes(id, value)) + geom_line(aes(colour = variable, linetype = variable)) + scale_linetype_manual(values = c(1,0)) + geom_point(aes(colour = variable, alpha = variable)) + scale_alpha_manual(values = c(0,1))

La clave es que necesita obtener la asignación correcta para que se muestre correctamente en la leyenda. En este caso, hacerlo bien, significa engañarlo para que se vea como usted quiere. Probablemente vale la pena señalar que esto solo funciona porque puede establecer el linetype de linetype en blanco (0) y luego usar la escala alpha para los puntos. No puedes usar alpha para ambos, porque solo tomará una escala.


Puede usar la función override.aes= inside guides() para cambiar la apariencia predeterminada de la leyenda. En este caso, su guía es color= y luego debe configurar shape=c(NA,16) para eliminar la forma de la línea y luego linetype=c(1,0) para eliminar la línea del punto.

ggplot(df) + geom_line(aes(id, line, colour = "line")) + geom_point(aes(id, points, colour = "points"))+ guides(color=guide_legend(override.aes=list(shape=c(NA,16),linetype=c(1,0))))