在ggplot2中分别对多面直方图进行规范化

12

我的问题与在R ggplot中将直方图y轴归一化为比例类似,但我想要补充一些内容。

一般来说,我有一个2x3的面板设计中包含6个直方图,我希望将它们分别归一化。我会尝试在这里创建一个示例数据集以提供一个思路:

hvalues=c(3,1,3,2,2,5,1,1,12,1,4,3)
season=c("fall","fall","fall","fall","winter","winter","winter","winter","summer","summer","summer","summer")
year=c("year 1","year 1","year 2","year 2","year 1","year 1","year 2","year 2","year 1","year 1","year 2","year 2")
group=c("fall year 1","fall year 1","fall year 2","fall year 2","winter year 1","winter year 1","winter year 2","winter year 2","summer year 1","summer year 1","summer year 2","summer year 2")
all=data.frame(hvalues,season,year)

使用

ggplot(all, aes(x=hvalues,group=group)) + 
geom_histogram(aes(y=..count../sum(..count..))) + 
facet_grid(season ~ year)

给出整体比例(即结合所有方面)。我希望每个分组方面都归一化为1。在我的实际数据中,hvalues不是整数-它们是数字。

我是一个使用R的新手,并真的很感激任何帮助。先谢谢了!


2
尝试使用 y = ..density.. - joran
1
all 必须是一个数据框。尝试使用 all <- as.data.frame(cbind(hvalues,season,year)) - Jonas Tundo
1
@JT85 我同意,但请不要鼓励使用 as.data.frame(cbind(...)) 代替 data.frame(...) - joran
2
请查看?stat_bin并尝试其中的选项。我认为也许..ncount..是你要找的。 - joran
1
叹气。没错。在每个方面都扩展到1正是你想要的。我现在要继续了。 - joran
显示剩余8条评论
1个回答

13
解决方案是:
ggplot(all, aes(x=hvalues)) +
    facet_grid(season ~ year,drop=T) +
    geom_histogram(aes(y=(..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..]))

我从这个问题中抄来了这个答案。

顺便说一句,我觉得你的问题可能是那个问题的重复。


1
有人知道哪些文档描述了 ..PANEL.. 吗?我在“计算变量”部分的 ?stat_bin 中看到了 count 等内容,但我不知道如何开始搜索 PANEL 的帮助。此外,这很棒。 - helmingstay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接