在多层图的一个方面显示特征子集

Displaying a subset of features in a facet of a multi-layer plot

我正在尝试生成一个多层图,其中一层中的点仅显示在使用另一层数据创建的小平面中。在下面的代码中,红色的点是 x1x2(就像 facet 的行标签一样)。

library(ggplot2)

set.seed(1000)

#generate first df
df1 = data.frame(x=rep(rep(seq(2,8,2),4),4), 
                 y=rep(rep(seq(2,8,2),each=4),4),
                 v1=rep(c("x1","x2"),each=32),
                 v2=rep(rep(c("t1","t2"),each=16),2),
                 v3=rbinom(64,1,0.5)) 

# generate second df
df2 = data.frame(x=runif(20)*10,
                 y=runif(20)*10,
                 v4=sample(c("x1","x2"),20,T))

# create theme
t1=theme(panel.grid.major = element_blank(), text = element_text(size=18),
         panel.grid.minor = element_blank(), strip.background= element_blank(),
         axis.title.x = element_blank(), axis.title.y = element_blank())

# plot
ggplot() + 
  geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15,  size=5) + 
  scale_colour_manual(values = c(NA,"black")) + facet_grid(v1~v2) +
  geom_point(data=df2, aes(x=x,y=y, shape=v4), colour="red", size=4) + 
  coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1

EDIT: 黑色方块是通过手动将df1$v3 = 1的颜色设置为blackdf1$v3 = 0的颜色生成的 NA. /编辑

但我真正想要的是仅显示 df2 中第一行 df2$v4 = x1 和第二行 df2$v4 = x2 的那些点(对应于df1$v1 的值和构面的行标签)。

我通过生成两个单独的图表来完成此操作...

ggplot() + 
  geom_point(data=df1[df1$v1=="x1",], shape=15,  size=5, 
  aes(x=x, y=y, colour = factor(v3)), ) + 
  scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) +
  geom_point(data=df2[df2$v4=="x1",], aes(x=x,y=y), colour="red", size=4) + 
  coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1

ggplot() + 
  geom_point(data=df1[df1$v1=="x2",], shape=15,  size=5, 
  aes(x=x, y=y, colour = factor(v3)), ) + 
  scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) +
  geom_point(data=df2[df2$v4=="x2",], aes(x=x,y=y), colour="red", size=4) + 
  coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1

...但我很好奇是否可以生成单个图,因为根据我的实际数据集,我有几个 x's 并且将这些图拼凑起来很耗时。

如果我们只是重命名 df2$v4 或创建一个名为 df2$v1 的新列是否有帮助,用于分面目的:

df2 <- dplyr::rename(df2, v1 = v4)
df2$v1 <- df2$v4
# either works

然后 ggplot 将按照您的意愿分配数据点,其中:

ggplot() + 
    geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15,  size=5) + 
    scale_colour_manual(values = c(NA,"black")) +
    facet_grid(v1~v2) +
    geom_point(data=df2, aes(x=x,y=y), colour="red", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + 
    t1

不是 100% 确定我理解你的问题...