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

nik*_*.96 7 r ggplot2 geom-bar geom-text

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

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

“错误:geom_text 需要以下缺失的美感:y 和标签”。

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))))
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

ste*_*fan 14

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

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

更新:点-点表示法在ggplot2 3.4.0. 相反,我们可以或应该使用after_stat,即使用egafter_stat(count)代替..count..

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

library(ggplot2)

ggplot(mtcars, aes(cyl, fill = factor(gear))) +
  geom_bar(position = "fill") +
  geom_text(aes(label = after_stat(count)),
    stat = "count", position = "fill"
  )
Run Code Online (Sandbox Code Playgroud)

还有两个注意事项:

  1. 为了使标签的位置正确,您必须将参数设置position为与 中使用的参数相匹配geom_bar,例如position="fill"在您的情况下。

  2. 虽然计数非常简单,但用百分比标记是一个不同的问题。默认情况下按stat_count组计算百分比,例如按通过 aes 设置的组fill。这些可以通过访问after_stat(prop)。如果您希望以不同的方式计算百分比,则必须手动执行。

举例来说,如果您希望每条柱的百分比总和为 100%,则可以使用after_statave(计算每组的百分比)来实现,如下所示:

library(ggplot2)

ggplot(mtcars, aes(cyl, fill = factor(gear))) +
  geom_bar(position = "fill") +
  geom_text(aes(label = after_stat(count)),
    stat = "count", position = "fill"
  )
Run Code Online (Sandbox Code Playgroud)