在ggplot2中分别标准化多面直方图

Posted

技术标签:

【中文标题】在ggplot2中分别标准化多面直方图【英文标题】:Normalizing faceted histograms separately in ggplot2 【发布时间】:2013-04-26 16:39:08 【问题描述】:

我的问题类似于 Normalizing y-axis in histograms in R ggplot to proportion 但我想补充一点。

一般来说,我在 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 的新手,非常感谢一些帮助。提前致谢!

【问题讨论】:

试试y = ..density.. all 必须是一个数据框。试试all <- as.data.frame(cbind(hvalues,season,year)) @JT85 我同意,但请不要鼓励使用as.data.frame(cbind(...)) 代替data.frame(...) 查看?stat_bin 并尝试那里的选项。我想..ncount.. 可能就是你要找的东西。 叹息。确切地。在每个方面缩放到 1 正是你所说的你想要的。我现在继续。 【参考方案1】:

解决办法是:

ggplot(all, aes(x=hvalues)) +
    facet_grid(season ~ year,drop=T) +
    geom_histogram(aes(y=(..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..]))

我从这个question偷了这个

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

【讨论】:

以上是关于在ggplot2中分别标准化多面直方图的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 并排绘制变量的均值和标准差

altair 多面直方图 - 独立尺度

添加一个虚拟因子以标准化多个图中的 x 轴

如何在 0 和 1 之间标准化直方图的 Y 轴?

标准化直方图? [关闭]

如何在 ggplot2 直方图中指定 x 轴?