我正在尝试生成带有数据标签的堆积柱形图。
我能够生成图表,但无法找到输入数据标签的方法。我试过 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")
另外两个注意事项:
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/