我正在尝试将三个数据集绘制到同一个图表上。一个数据集应该在图表上显示为一组未连接的点,而另外两个应该显示为连接的数据点。 我可以使用以下代码构建图表:
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")
使用此命令,红点连接,蓝色连接,绿色断开。但是,我不想这样做,因为我希望能够让所有的颜色点都出现在图例中(此解决方案中没有图例)。
答案 0 :(得分:36)
诀窍是每个图层都可以拥有自己的数据集。因此,您必须对数据进行分组,以便从提供给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"))
答案 1 :(得分:10)
您可以将不同的数据集输入每个geom。因此,您可以将除p1之外的数据集传递到geom_line图层。这样的事情应该有效:
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"))