基于多个数据集的独立构面网格

时间:2013-06-01 09:47:14

标签: r ggplot2 facets

如果我在同一个图上有两个数据集,那么我可以在该图上有两个独立的面,每个面对应一个不同的数据集吗?

例如,在散点图中,可以在x方向上分割一个数据,可以在y方向上分割另一个数据。

例如,考虑以下代码,我试图将d1分割为X轴小于0.5且大于0.5的值, 类似地,d2和y轴。这样运行,但我不明白为什么我得到了结果。

ggplot2可能不是为此而设计的。我没有考虑申请,我只是想了解一下 分面限制和使用示例比尝试理解代码更容易。

library("ggplot2")

splitvec <- function(v)
{
  if(v<0.5)
    return("L")
  else if(v>=0.5)
    return("R")
}

set.seed(1)
x1 <-  runif(5, 0, 1)
y1 <-  runif(5, 0, 1)
xsplit <- sapply(x1, splitvec)
d1 = data.frame(x=x1, y=y1, X=xsplit)
x2 <-  runif(5, 0, 1)
y2 <-  runif(5, 0, 1)
ysplit <- sapply(y2, splitvec)
d2 = data.frame(x=x2, y=y2, Y=ysplit)

r = ggplot() +
    geom_point(data=d1, aes(x=x, y=y)) + facet_grid( ~ X) +
    geom_point(data=d2, aes(x=x, y=y)) + facet_grid(Y ~ .)

1 个答案:

答案 0 :(得分:4)

在这种情况下,您可以执行以下操作:

       facet_grid(Y~X)

由于按顺序应用网格刻面。请注意,在这种情况下,您无法使用facet_wrap。  在这里,我将重写您的代码,以便为每个拆分变量(X,Y)使用不同的因子。

d1$X <- ifelse(d1$x<0.5,'d1.L','d1.R') 
d2$Y <- ifelse(d2$x<0.5,'d2.L','d2.R')

最好为每个数据使用不同的颜色来理解数据会发生什么。

r = ggplot() +
  geom_point(data=d1, aes(x=x, y=y),col='blue',size=10) +
  geom_point(data=d2, aes(x=x, y=y))+
  facet_grid(Y~X,scales="free")+
  theme(strip.text = element_text(size=20))

enter image description here