在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'。我做错了什么?
答案 0 :(得分:2)
将aes(foo$b)
更改为aes(x = b)
,以确保美学正确映射。
您希望确保ggplot
从正确的范围(即已传递的数据)中找到标记为b
的列。例如,ggplot
传递数据时可能会重新排列数据,因此映射变量foo$b
不再符合您的要求。
我并不是说这就是发生的事情 - 只是为什么从正确的范围内调用美学的一个例子很重要。