ggplot2:使用相同数据的子集覆盖散点图

时间:2013-02-25 16:02:44

标签: r ggplot2 overlay

我想为每个散点图生成一个带有ggplot的刻面散点图,其中包含一种颜色的整个数据集,在整个散点图的顶部有一个不同颜色的ID(同一数据集)。这是数据:

**trajectories**

X    Y    ID
2    4     1
1    6     1
2    4     1
1    8     2
3    7     2
1    5     2
1    4     3
1    6     3
7    4     3

我使用以下代码为每个ID生成散点图:

ggplot(trajectories, aes(x=X, y=Y)) + 
geom_point() + 
facet_wrap( ~ ID)

如何在整个数据集的散点图上打印每个散点图?

3 个答案:

答案 0 :(得分:3)

我能想到的唯一方法是复制数据集3次,并为颜色设置备用ID,并为拼接设置单独的组。假设您的data.framedf

df$ID  <- NULL
df$ID1 <- rep(1:2, c(3,6))
df$ID2 <- c(2,2,2,1,1,1,2,2,2)
df$ID3 <- rep(2:1, c(6,3))
require(reshape2)
df.m <- melt(df, id.var=c("X", "Y"))
df.m$grp <- gl(3, 9)
df.m$value <- factor(df.m$value)

ggplot(data = df.m, aes(x = X, y = Y)) + geom_point(aes(colour = value)) + 
       facet_wrap(~ grp) + scale_colour_manual(values = c("blue", "black"))

enter image description here

请注意,您在不同的组中有相似的点,因此该组的某些颜色会被下一组的颜色覆盖。例如:(1,6)在第一个方面应该是蓝色,但ID = 3中有一个(1,6)因此将蓝色替换为黑色。

答案 1 :(得分:2)

这应该有效:

ggplot(trajectories, aes(x=X, y=Y)) + 
  geom_point(color = ID) 

这将创建一个散点图,每个ID都有一个颜色。如果您想要只有一种颜色的散点图,只需省略color = id位。

要遮蔽某个身份证的区域,您可以从这里汲取灵感:

How can I overlay two dense scatter plots so that I can see the outlines of each in R or Matlab?

它基本上计算子组周围的凸包,并在其周围绘制一个多边形。

答案 2 :(得分:1)

在基础图中,您可以执行以下操作:

  par(mfrow=c(length(unique(ID)),1))
    for(i in unique(ID)){ plot(X,Y,col=as.numeric(ID==i)+1)}

enter image description here

如果过度绘图有问题,可以添加抖动()或透明色。