You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot2堆叠柱状图添加数据标签失败,求geom_text用法指导

解决ggplot2堆叠柱状图添加数据标签的问题

你的问题出在两个核心点:

  1. 你把geom_bar的stat改成了"identity",但没有提供对应的y轴数值——stat="identity"需要手动传入已汇总好的计数,而非让ggplot自动计算;
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:45:35