ggplot2堆叠柱状图添加数据标签失败,求geom_text用法指导
解决ggplot2堆叠柱状图添加数据标签的问题
你的问题出在两个核心点:
- 你把
geom_bar的stat改成了"identity",但没有提供对应的y轴数值——stat="identity"需要手动传入已汇总好的计数,而非让ggplot自动计算; geom_text里用了label = count,但原始数据集bank_train并没有count列,这个值是geom_bar(stat="count")自动统计出的临时变量,并非原始数据自带。
下面给你两种可行的解决方案:
方案一:先手动汇总数据(逻辑更清晰,推荐)
先用dplyr包提前计算每个分组的计数,再基于汇总后的数据绘图:
# 先安装并加载dplyr(如果没装过的话) # install.packages("dplyr") library(dplyr) library(ggplot2) # 按previous_outcome和response分组,统计每组数量 summary_data <- bank_train %>% count(previous_outcome, response) # 绘图:用geom_col替代geom_bar(stat="identity"),添加居中标签 ggplot(summary_data, aes(x = previous_outcome, y = n, fill = response)) + geom_col() + geom_text(aes(label = n), position = position_stack(vjust = 0.5), colour = "white", size = 5) + scale_fill_manual(values = c("orange", "lightblue"))
方案二:直接调用ggplot的统计变量(无需提前汇总)
利用after_stat()函数直接获取geom_bar自动统计出的count值,不用修改原始数据集:
library(ggplot2) ggplot(bank_train, aes(x = previous_outcome, fill = response)) + geom_bar() + # 保留默认stat="count",自动计算分组计数 geom_text(aes(label = after_stat(count), y = after_stat(count)), position = position_stack(vjust = 0.5), colour = "white", size = 5) + scale_fill_manual(values = c("orange", "lightblue"))
关键细节说明:
position_stack(vjust = 0.5)的作用是让标签垂直居中在每个堆叠的柱段内;- 方案一中的
n是count()函数生成的计数列,你可以自定义列名,只要前后对应即可; - 方案二中的
after_stat(count)是告诉ggplot:使用刚才统计生成的临时计数变量,而非原始数据中的列。
内容的提问来源于stack exchange,提问作者Riddle
相关产品推荐
相关产品推荐

