如何使用 stat="count" 在 ggplot2 中用计数或百分比标记条形图?

How to use stat="count" to label a bar chart with counts or percentages in ggplot2?

我正在尝试生成带有数据标签的堆积柱形图。

我可以生成图表,但无法找到输入数据标签的方法。我试过 geom_text() 但它一直要求我输入一个 y 标签(如果你看到 ggplot 代码不存在的话)。我也尝试添加 geom_text(stat = "count") 但这也给了我一个错误说

"Error: geom_text requires the following missing aesthetics: y and label".

PS - 我知道我需要将 y 轴重命名为百分比。我也在尝试弄清楚如何使用更多对比色

ggplot(property,
       aes(x=Bedrooms.New, fill=Property.Type.)) + 
  geom_bar(position = "fill") + 
  scale_x_discrete(name = "Number of Bedrooms", 
                   limits = sort(factor(unique(property$Bedrooms.New))))

我在下面添加了一张图片,看看我现在的输出是什么!

正如错误消息告诉您的那样,geom_text 需要 label aes。在你的情况下,你想用一个变量来标记条形图,该变量不是你的数据集的一部分,而是通过 stat="count" 计算的,即 stat_count.

可以通过..NAME_OF_COMPUTED_VARIABLE..访问计算变量。 ,例如要获得计数,请使用 ..count.. 作为变量名。顺便说一句:计算变量的列表可以在 stat 或 geom 的帮助包中找到,例如?stat_count

使用 mtcars 作为示例数据集,您可以像这样标记 geom_bar

library(ggplot2)

ggplot(mtcars, aes(cyl, fill = factor(gear)))+
  geom_bar(position = "fill") +
  geom_text(aes(label = ..count..), stat = "count", position = "fill")

另外两个注意事项:

  1. 要使标签的位置正确,您必须设置 position 参数以匹配 geom_bar 中使用的参数,例如position="fill" 你的情况。

  2. 虽然计数很容易,但用百分比标记是另一回事。默认情况下 stat_count 按组计算百分比,例如通过 fill aes 设置的组。这些可以通过 ..prop.. 访问。如果您希望以不同方式计算百分比,则必须手动进行。

例如,如果您希望每个柱的百分比总和为 100%,则可以这样实现:

library(ggplot2)

ggplot(mtcars, aes(cyl, fill = factor(gear)))+
  geom_bar(position = "fill") +
  geom_text(aes(label = ..count.. / tapply(..count.., ..x.., sum)[as.character(..x..)]), stat = "count", position = "fill")