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