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

如何为stat='summary'的geom_bar柱状图顶部添加均值文本

在ggplot均值柱状图顶部添加均值文本的方法

你可以通过在原代码中添加geom_text()层来实现,以下是两种常用方案:

方案1:直接在ggplot中结合统计层添加文本

直接复用柱状图的统计逻辑,让文本自动匹配柱子的均值:

ggplot(aes(x=MALE, y=AMOUNT, fill=MALE)) +
  geom_bar(stat="summary", fun="mean") +
  # 添加顶部均值文本
  geom_text(stat="summary", fun="mean",
            aes(label=round(after_stat(y), 2)), # 保留2位小数显示均值
            vjust=-0.5, # 让文本向上偏移,避免和柱子重叠
            size=4) + # 调整文本大小
  ylab("Avg Amount") +
  theme(axis.title.x = element_blank())

参数说明:

  • stat="summary", fun="mean":和柱状图使用完全一致的统计规则,确保文本对应的是柱子的均值
  • after_stat(y):引用统计计算后的均值结果(ggplot 3.3.0+版本推荐用这个替代旧版的stat(y))
  • round(after_stat(y), 2):将均值保留2位小数,让显示更整洁,可根据需求修改小数位数
  • vjust=-0.5:垂直方向调整文本位置,负数表示向上偏移,正数则向下

方案2:先计算均值再绘图

如果需要更直观地控制均值数据,可以先提前计算好分组均值,再基于计算结果绘图:

# 先分组计算均值(需加载dplyr包)
library(dplyr)
mean_data <- your_data_frame %>%
  group_by(MALE) %>%
  summarise(avg_amount = mean(AMOUNT, na.rm = TRUE)) # na.rm=TRUE用于忽略缺失值

# 基于预处理后的均值数据绘图
ggplot(mean_data, aes(x=MALE, y=avg_amount, fill=MALE)) +
  geom_col() + # 用geom_col代替geom_bar,因为已经是汇总后的数据
  geom_text(aes(label=round(avg_amount, 2)),
            vjust=-0.5, size=4) +
  ylab("Avg Amount") +
  theme(axis.title.x = element_blank())

这种方法的优势是可以提前检查均值数据,方便做数据清洗或调整,适合数据量较大或需要复杂预处理的场景。

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:15:42