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

如何在ggplot2堆叠条形图上添加总计标记线?

在堆叠条形图上添加Total列的标记线条

数据预处理

你的数据集每个国家对应两行数据,Total值重复,先提取每个国家唯一的Total记录,保证后续绘制不重复:

library(dplyr)
# 假设原始数据框名为df
total_data <- df %>% 
  distinct(Country, Total) %>% 
  mutate(y_pos = reorder(Country, Total)) # 和绘图的y轴排序完全对齐

修改绘图代码

在你原有的ggplot代码基础上,添加geom_segment来绘制Total标记线,这里提供两种常用方案:

方案1:垂直标记线(精准定位Total值位置)

直接在每个国家的y轴位置,画一条垂直于x轴的虚线标记Total数值:

library(ggplot2)

ggplot(df, aes(x = Value, y = reorder(Country, Total), fill = Type)) +
  geom_bar(stat = "identity", color = "black") +
  scale_fill_manual(values=c("#1E8BC3", "#E85B4E")) +
  geom_vline(xintercept = 0, size = 1) +
  # 添加Total垂直标记线
  geom_segment(data = total_data, 
               aes(x = Total, xend = Total, y = y_pos, yend = y_pos),
               color = "#2ECC71", size = 1.2, linetype = "dashed") +
  # 可选:添加Total数值标签,自动调整位置避免遮挡
  geom_text(data = total_data, 
            aes(x = Total, y = y_pos, label = Total),
            color = "#27AE60", size = 4, 
            hjust = ifelse(total_data$Total > 0, -0.2, 1.2))

方案2:水平参考线(展示Total与0的差值)

绘制从x=0到x=Total的水平线条,更直观展示总和与零点的关系:

ggplot(df, aes(x = Value, y = reorder(Country, Total), fill = Type)) +
  geom_bar(stat = "identity", color = "black") +
  scale_fill_manual(values=c("#1E8BC3", "#E85B4E")) +
  geom_vline(xintercept = 0, size = 1) +
  # 添加从0到Total的水平参考线
  geom_segment(data = total_data, 
               aes(x = 0, xend = Total, y = y_pos, yend = y_pos),
               color = "#F39C12", size = 1, linetype = "dotdash") +
  # 添加带说明的标签
  geom_text(data = total_data, 
            aes(x = Total, y = y_pos, label = paste("总和:", Total)),
            color = "#D35400", size = 3.5, 
            hjust = ifelse(total_data$Total > 0, 0, 1))

关键说明

  • distinct(Country, Total):剔除重复的Total记录,避免同一国家绘制多条重复线条。
  • reorder(Country, Total):确保Total数据的y轴位置和堆叠条形图完全匹配,不会错位。
  • hjust参数:根据Total值的正负自动调整标签位置,防止被条形图遮挡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:40:53