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

如何为ggplot组合图表(柱状图+折线图)添加数据标签

解决ggplot组合图(柱状+折线)添加对应标签的问题

你的核心问题是两个geom_label没有明确对应各自图层的y轴映射,导致标签位置错误。以下是修正后的代码和关键说明:

修正后的代码

ggplot(Ann_Distribution) +
  geom_bar(aes(x = Year, y = TOTAL), stat = 'sum') +
  geom_line(aes(x = Year, y = EO), color = "Black", group = 1, size = 1) +
  # 柱状图顶端的TOTAL标签
  geom_label(aes(x = Year, y = TOTAL, label = TOTAL),
             position = position_stack(vjust = 1.05), size = 3) +
  # 折线点上方的EO标签
  geom_label(aes(x = Year, y = EO, label = EO),
             nudge_y = max(Ann_Distribution$EO) * 0.05, size = 3) +
  xlab("Year") +
  ylab("Amount")

关键调整说明

  • 明确y轴映射:两个geom_label必须分别指定y=TOTAL和y=EO,确保标签对应各自的数据系列,避免ggplot复用第一个图层的y轴设置。
  • 柱状图标签位置:position_stack(vjust = 1.05)让标签落在柱子顶端的上方(vjust大于1时向上偏移),如果你的柱状图没有分组堆叠,这个设置能保证标签对齐柱子顶部。
  • 折线图标签偏移:用nudge_y给折线标签添加向上的偏移量,这里取EO最大值的5%作为偏移比例,你可以根据数据的数值范围调整这个比例,避免标签和折线点重叠。

针对未汇总数据的补充

如果你的Ann_Distribution是按Year有多行数据(未预先汇总),那么geom_bar的stat='sum'会自动求和,但geom_label也需要同步使用stat='sum'来获取求和后的数值:

ggplot(Ann_Distribution) +
  geom_bar(aes(x = Year, y = TOTAL), stat = 'sum') +
  geom_line(aes(x = Year, y = EO), color = "Black", group = 1, size = 1) +
  geom_label(aes(x = Year, y = TOTAL, label = after_stat(sum)),
             stat = 'sum', position = position_stack(vjust = 1.05), size = 3) +
  geom_label(aes(x = Year, y = EO, label = after_stat(sum)),
             stat = 'sum', nudge_y = max(Ann_Distribution$EO) * 0.05, size = 3) +
  xlab("Year") +
  ylab("Amount")

这里用after_stat(sum)来引用stat='sum'计算后的结果作为标签内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:20:40