虽然有几篇关于如何在条形图的每个方面使用缩放百分比的帖子,但我没有看到任何帖子显示如何在直方图中执行此操作。可以这样做吗?
这是我研究过的两篇文章:
所以帖子1:使用 ggplot2 获取反映各个方面的百分比比例 https://stackoverflow.com/questions/9614720/obtaining-percent-scales-reflective-of-individual-facets-with-ggplot2这篇文章的最后一个答案表明解决方案不再适用于较新版本的 ggplot2 并建议使用 stat_count() 但没有给出示例。
所以帖子2:多面 ggplot 条形图中 y 实验室的百分比? https://stackoverflow.com/questions/4725339/percentage-on-y-lab-in-a-faceted-ggplot-barchart
以下代码创建一个直方图,其中百分比在所有方面(即所有条形之和为 100%)而不是在每个方面内缩放。
ggplot(iris, aes(Sepal.Width, y=(..count..)/sum(..count..))) + geom_histogram(bins=2) +
facet_grid(~Species) + scale_y_continuous(labels = scales::percent)
有没有办法在每个方面进行扩展?如果没有,转换为条形图的有效策略是什么?如果我必须走那条路,我可以使用cut()
创建 bin 指标的因子,然后计算方面变量的每个级别内的 bin 频率(使用dplyr::count()
?),然后使用geom_bar()
。看起来很复杂。我怀疑有一个geom_histogram()
解决方案。
感谢您的任何想法...
@aosmith 指出,其中一篇研究帖子中的一个答案利用了 ..PANEL.. 内部变量。采纳该建议,下面更新的代码确实可以工作,尽管 y 映射更复杂。
ggplot(iris, aes(Sepal.Width, y=(..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..])) +
geom_histogram(bins=2) + facet_grid(~Species) +
scale_y_continuous(labels = scales::percent) + labs(y='% within facet')
然而,在这个帖子 https://stackoverflow.com/questions/20622332/documentation-on-internal-variables-in-ggplot-esp-panel,Hadley Wickham 建议不要以这种方式使用 ..PANEL..(和其他内部变量)。他建议在 ggplot 之外进行聚合。因此,也许问题的答案是,您可以使用故意未记录的“..PANEL..”变量,但要注意使用此类功能的风险,该功能很容易在新版本中发生更改,而无需解释。
也许有人可以请求一个功能,将面的密度缩放控制为“整体”、“按列”、“按行”、“按面”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)