在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中分别标准化多面直方图的主要内容,如果未能解决你的问题,请参考以下文章