首页 文章

如何使用相对于每个面的百分比绘制多面直方图(不是条形图)?

提问于
浏览
4

虽然有几个关于如何使用在条形图的每个方面内缩放的百分比的SO帖子,但我没有看到任何显示如何在直方图中做到这一点 . 这样可能吗?

这是我研究过的两篇文章:

所以帖子1:Obtaining Percent Scales Reflective of Individual Facets with ggplot2这篇文章的最后一个答案表明解决方案不再适用于较新版本的ggplot2并建议使用stat_count()但不提供示例 .

SO post2: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)

Histogram

有没有办法在每个方面进行扩展?如果没有,那么转换成条形图的有效策略是什么?如果我必须走这条路线,我可以使用 cut() 创建一个bin指标因子,然后在facet变量的每个级别内计算bin频率(使用 dplyr::count() ?),然后使用 geom_bar() . 似乎很复杂 . 我怀疑有一个 geom_histogram() 解决方案 .

谢谢你的任何想法......

1 回答

  • 1

    @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')
    

    enter image description here

    但是,在this SO post中,Hadley Wickham建议不要以这种方式使用..PANEL ..(以及其他内部变量) . 他建议在ggplot之外进行聚合 . 所以也许这个问题的答案是你可以使用故意无证的'..PANEL..'变量,但要注意使用这种功能的风险,这种功能很容易在没有解释的情况下在新版本中发生变化 .

    也许有人可以请求一个控制facet密度缩放的功能为'整体','按col','by row','by facet' .

相关问题