r - ggplot2中同一图上多个数据集的geom_point()和geom_line()

标签 r ggplot2

我试图将三个数据集绘制到同一张图上。一个数据集应在图表上仅显示为一组未连接的点,而其他两个数据集应显示为已连接的数据点。
我可以使用以下代码构建图形:

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")

如代码中所示,绘制了两组点,其类型为“o”,这意味着这些点通过线连接,而一组点则不通过线连接。我试图在ggplot2中重新创建它。
我在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"))

进行上述操作后,我得到了三种颜色不同的三组点,但是红色和蓝色点当然没有分别连接。
如果要连接这些点,可以将geom_line()添加到上面的命令中,以便获得以下内容:
ggplot(zz, aes(x.value, color = L1)) + geom_point() + 
scale_color_manual("Dataset", values = 
c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) + geom_line()

当然,这导致连接所有点的线连接,因此所有红色点都相互连接,所有蓝色点都相互连接,所有绿色点都相互连接。但是,虽然我希望连接红色和蓝色点,但我不想连接绿色点。有没有办法做到这一点?

我可以执行以下操作(或类似操作):
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")

使用此命令,将连接红点,连接蓝色和绿色。但是,我不想这样做,因为我希望所有点颜色都出现在图例中(并且此解决方案中没有图例出现)。

最佳答案

诀窍是每个图层都可以拥有自己的数据集。因此,您必须对数据进行子集化,以从提供给L1=="p1"的数据中排除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"))

关于r - ggplot2中同一图上多个数据集的geom_point()和geom_line(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476022/

相关文章:

r - 使用选项卡将数据写入文件

r - [R][传单] : hyperlink on click

将列重命名为 Y X1 X2 X3 X4 .. XN

r - 如何在 fviz_pca_var 标签中包含下标?

r - 用户选择主题 R Shiny ggplot

r - 如何在 geom_sf() 中翻转 y 轴?

r - 如何使用R将频率转换为文本?

r - 按 R 中的列匹配 ID 追加列

r - 使用函数向 ggplot 添加多个图层

r - nearPoints 无法从 Shiny 的坐标信息中自动推断出 `xvar`