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

ggplot堆叠柱状图:在每个堆叠柱顶部显示对应均值

堆叠柱状图顶部添加均值文本解决方案

原代码问题分析

  • 语法错误:aes中color = Month + label = Class写法错误,柱状图应使用fill映射分组填充色,color默认控制边框颜色
  • 未指定geom_text的独立数据源:直接引用Df_class_mean$Mean_Class会导致主数据框Df_class与均值数据框行数不匹配
  • 未正确映射文本与主图的x轴关联关系

方案1:在整个堆叠柱顶部显示该组(series)的均值

假设Df_class_mean包含series(与主图x轴一一对应)和Mean_Class(每组均值)两列,每个series对应一行数据:

ggplot(Df_class, aes(x = series, y = Class, fill = Month)) + 
  geom_col(position = "stack", show.legend = TRUE) + 
  labs(x = "BG ID", y = "Class Total", title = "Class Total") + 
  theme(axis.text = element_text(colour = "black", size = rel(0.45))) +
  # 指定均值数据源,映射x/y轴与文本内容
  geom_text(data = Df_class_mean, 
            aes(x = series, y = Mean_Class, label = round(Mean_Class, 2)),
            size = 3, vjust = -0.5) # vjust=-0.5将文本放在柱子顶部上方,避免重叠

方案2:在每个堆叠层顶部显示该层(series+Month)的均值

如果需要给每个堆叠子柱添加对应均值,先分组计算层均值,再用position_stack对齐位置:

# 先计算每个series+Month分组的均值
Df_layer_mean <- Df_class %>%
  group_by(series, Month) %>%
  summarise(Mean_Class = mean(Class), .groups = "drop")

ggplot(Df_class, aes(x = series, y = Class, fill = Month)) + 
  geom_col(position = "stack", show.legend = TRUE) + 
  labs(x = "BG ID", y = "Class Total", title = "Class Total") + 
  theme(axis.text = element_text(colour = "black", size = rel(0.45))) +
  # 用position_stack对齐堆叠层位置,vjust=1将文本放在层顶部
  geom_text(data = Df_layer_mean, 
            aes(x = series, y = Mean_Class, label = round(Mean_Class, 2)),
            position = position_stack(vjust = 1),
            size = 3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:24:29