varias superponer studio libreria gráficos graficos graficas ggplot geom_smooth avanzados r ggplot2

studio - superponer graficas en r ggplot



geom_point() y geom_line() para múltiples datasets en el mismo gráfico en ggplot2 (2)

Estoy tratando de trazar tres conjuntos de datos en el mismo gráfico. Un conjunto de datos debe aparecer en el gráfico como solo un conjunto de puntos no conectados, mientras que los otros dos deben aparecer como puntos de datos conectados. Puedo construir el gráfico usando el siguiente código a continuación:

x <- c(1,2,3,4) y <- c(1.1,1.2,1.3,1.4) y2 <- c(2.1,2.2,2.3,2.4) x3 <- c(4,5,6,7) y3 <- c(3.1,3.2,3.3,3.2) p1 <- data.frame(x=x,y=y) p2 <- data.frame(x=x,y=y2) p3 <- data.frame(x=x3,y=y3) plot(x,y,type="o", col="red") points(x3,y3,col="darkgreen",pch=16) points(x,y2,type="o",col="blue")

Como se muestra en el código, hay dos conjuntos de puntos que se trazan con el tipo "o", lo que significa que los puntos están conectados por una línea, mientras que un conjunto de puntos no está conectado por una línea. Estaba intentando recrear esto en ggplot2. Hago lo siguiente en ggplot2:

zz <- melt(list(p1=p1,p2=p2,p3=p3), id.vars="x") ggplot(zz, aes(x.value, color = L1)) + geom_point() + scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red"))

Al hacer lo anterior, obtengo los tres conjuntos de puntos en tres colores diferentes, pero por supuesto los puntos rojo y azul no están conectados respectivamente. Si quiero conectar los puntos, puedo agregar geom_line () al comando de arriba para que tenga lo siguiente:

ggplot(zz, aes(x.value, color = L1)) + geom_point() + scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) + geom_line()

Por supuesto, esto da como resultado líneas que conectan todos los puntos, de modo que todos los puntos rojos se conectan entre sí, todos los puntos azules se conectan entre sí, y todos los puntos verdes se conectan entre sí. Sin embargo, aunque quiero que los puntos rojo y azul estén conectados, no quiero que se conecten los puntos verdes. ¿Hay alguna forma de hacer esto?

Podría hacer lo siguiente (o algo similar):

ggplot(p2, aes(x,y)) + geom_point(color = "blue") + geom_line(color="blue") + geom_point(data=p3, color = "red") + geom_line(data=p3, color="red") + geom_point(data=p1, color = "darkgreen")

Con este comando, los puntos rojos están conectados, el azul está conectado y el verde está desconectado. Sin embargo, no quiero hacer esto porque quiero que todos los colores de los puntos aparezcan en la leyenda (y no aparece ninguna leyenda en esta solución).


El truco es que cada capa puede tener su propio conjunto de datos. Por lo tanto, debe subconjuntar los datos para excluir L1=="p1" de los datos proporcionados a geom_line :

ggplot(zz, aes(x, y=value, color=L1)) + geom_point() + geom_line(data=zz[zz$L1!="p1", ]) + scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red"))


Puede alimentar un conjunto de datos diferente en cada geom. Entonces puede pasar un conjunto de datos excluyendo p1 a la capa geom_line. Algo como esto debería funcionar:

ggplot(zz, aes(x, value, color = L1)) + geom_point() + geom_line(data = subset(zz, L1 %in% c("p2", "p3")), aes(group = L1)) + scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red"))