首页 > 解决方案 > 带有 scale_y_continuous() 的多面直方图中的百分比

问题描述

我正在尝试使用scale_y_continuous()多面直方图并遇到问题。我希望让每个计数变成一个百分比。我的代码是:

ggplot(d, aes(x = likely_att)) +
  geom_histogram(binwidth = 0.5, color = "black") +
  facet_wrap(~married, scales = "free_y") +
  theme_classic() +
  scale_y_continuous(labels = percent_format())

看起来分布本身是准确的,但比例失调:百分比是“200 000%”、“5 000%”等,这似乎是错误的,但我不太确定为什么会这样。

在我的数据集中,“是”比“否”或“分离”的已婚值要多得多,这就是我使用的scales = "free_y"原因以及我希望只显示百分比并且只需要显示一个轴值的原因。

出于隐私原因,我无法分享这些确切的数据,但该likely_att变量只是一个 1-5 数字变量,并且married是一个具有 3 个值的字符变量:是、否、分隔。

如果它有帮助,我基本上希望它看起来像这张图片,但是用百分比而不是计数,所以我可以在最左边有一个 y 轴,0 - 100 %

在此处输入图像描述

标签: rggplot2histogramfacet

解决方案


问题是使用该percentage_format()函数会改变标签的打印方式,但实际上并没有重新调整数字。为此,您可以使用密度构造变量并将其乘以 bin 宽度,然后使用百分比格式。

ggplot(d, aes(x = likely_att)) +
  stat_bin(aes(y=..density..*.5, group = married), 
                 binwidth = 0.5, color = "black") +
  facet_wrap(~married, scales = "free_y") +
  theme_classic() +
  scale_y_continuous(labels = percent_format())

推荐阅读