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

标签 r ggplot2 geom-bar geom-text

我正在尝试生成带有数据标签的堆积柱形图。
我能够生成图表,但无法找到输入数据标签的方法。我试过 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))))
我在下面添加了一张图片,看看我现在的输出是什么!
enter image description here

最佳答案

正如错误消息告诉您的那样,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")

另外两个注意事项:
  • 要获得正确的标签位置,您必须设置 position参数匹配 geom_bar 中使用的参数,例如position="fill"在你的情况下。
  • 虽然计数很容易,但用百分比标记是一个不同的问题。默认 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")
    

    关于r - 如何使用 stat ="count"在 ggplot2 中用计数或百分比标记条形图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63653351/

    相关文章:

    R - 生成数据帧,使每个值出现相同的次数

    r - 将逻辑回归与条形图结合起来以获得成熟度结果

    r - 为特定 geom_node_text 绘制标签

    r - 条形 geom_bar 之间的不同空间

    r - 将条形图绘制到 R ggplot2 中的 map

    r - 使用 dplyr 计算组平均值,同时排除当前观察值

    r - 在 R 中创建条件虚拟变量列

    从 R 包中删除/取消注册特定功能

    r - ggplot2:快速热图绘制、 reshape ?

    r - ggplot2 geom_bar : Centering bars