我想为每个散点图生成一个带有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)
如何在整个数据集的散点图上打印每个散点图?
答案 0 :(得分:3)
我能想到的唯一方法是复制数据集3次,并为颜色设置备用ID,并为拼接设置单独的组。假设您的data.frame
为df
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"))
请注意,您在不同的组中有相似的点,因此该组的某些颜色会被下一组的颜色覆盖。例如:(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)}
如果过度绘图有问题,可以添加抖动()或透明色。