0

我想为每个散点图生成一个带有 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)

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

4

3 回答 3

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

在此处输入图像描述

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

于 2013-02-25T16:52:26.013 回答
2

这应该有效:

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

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

要对某个 id 的区域进行着色,您可以从这里获得一些灵感:

如何叠加两个密集散点图,以便在 R 或 Matlab 中看到每个散点图的轮廓?

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

于 2013-02-25T16:05:27.107 回答
1

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

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

在此处输入图像描述

如果过度绘图是一个问题,您可以添加 jitter() 或透明颜色。

于 2013-02-25T17:01:07.660 回答