为什么facet_grid将分布放在错误的象限中?

时间:2015-07-18 22:18:39

标签: r ggplot2 histogram

在ggplot2中使用facet_grid(x ~ y)时,我在各种示例中看到过,并在文档中读到x变量是垂直布局的,y变量是水平布局的。但是,当我运行以下内容时:

set.seed(1)
b = c(rnorm(10000,mean=0,sd=0.5),rnorm(10000,mean=5,sd=0.5),
      rnorm(10000,mean=7,sd=0.5),rnorm(10000,mean=10,sd=0.5))
x = c(rep('xL', 20000), rep('xR',20000))
y = c(rep('yL',10000), rep('yR',20000), rep('yL',10000))
foo = data.frame(x=x,y=y,b=b)

ggplot(data=foo, aes(foo$b)) + 
  geom_histogram(aes(y=..density..),breaks=seq(-5,12,by=.2),col='steelblue',fill='steelblue2') + 
  geom_density(col='black') + 
  facet_grid(x ~ y, scales='free_y')

我得到以下(抱歉质量)。而且,即使从上面看,平均值为10的分布是具有“xR,xL”的(x,y)的分布,其中一个出现在右下象限中,其标记为'xR,yR'。我做错了什么?

enter image description here

1 个答案:

答案 0 :(得分:2)

aes(foo$b)更改为aes(x = b),以确保美学正确映射。

您希望确保ggplot从正确的范围(即已传递的数据)中找到标记为b的列。例如,ggplot传递数据时可能会重新排列数据,因此映射变量foo$b不再符合您的要求。

我并不是说这就是发生的事情 - 只是为什么从正确的范围内调用美学的一个例子很重要。