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

ggplot2 geom_col保留fill分类映射时如何在柱顶标注y轴总值

堆叠柱状图柱顶标注总和实现方案

相关示例

Bar Graph

需求说明

基于msleep数据集绘制堆叠柱状图,将fill美学属性映射到genus分类变量:

  • 保留原有的genus分类填充映射逻辑
  • 移除原有代码在每个堆叠分片上的零散数值标注
  • 仅在每根完整柱子的顶部,标注该柱所有堆叠分片的sleep_total总和值

原有问题代码

msleep %>% 
  ggplot(aes(order, sleep_total, fill = genus))+
  geom_col()+
  geom_text(aes(label = sleep_total), position = position_stack(vjust = 0.5), size =3)+
  theme_minimal()

原有代码直接基于原始分片数据集做文本标注,因此标注会默认落在每个堆叠块内部,不符合需求。

正确实现代码

核心逻辑是提前按x轴分类(order)分组计算每根柱子的总睡眠时长,单独传入汇总数据集做柱顶标注,不需要对标注文本做堆叠位置调整:

library(ggplot2)
library(dplyr)

# 提前按order分组,计算每个分类下的sleep_total总和
msleep_sum <- msleep %>%
  group_by(order) %>%
  summarise(
    total = sum(sleep_total, na.rm = TRUE),
    .groups = "drop"
  )

msleep %>% 
  ggplot(aes(x = order, y = sleep_total, fill = genus)) +
  geom_col() +
  # 传入汇总后的数据集做顶部标注
  geom_text(
    data = msleep_sum,
    aes(x = order, y = total, label = round(total, 1)),
    size = 3,
    vjust = -0.2 # 调整标注位置,避免和柱顶重叠
  ) +
  theme_minimal()

参数调整说明

  • na.rm = TRUE:跳过sleep_total字段中的缺失值,避免求和结果返回NA
  • round(total, 1):将总和值保留1位小数,可根据展示需求调整保留位数
  • vjust = -0.2:控制标注和柱顶的垂直间距,数值越大标注越靠下,可根据画布尺寸、字体大小灵活调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:06:25