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

问题描述

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

我能够生成图表,但无法找到输入数据标签方法。我已经尝试过geom_text(),但是它一直要求我输入y标签(如果您看到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))))

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

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")

另外两个注释:

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

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

例如,如果您希望百分比总计为每条100%,可以这样实现:

library(ggplot2)

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