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

ggplot2堆叠柱状图:如何绘制年度总柱子的连续轮廓

解决ggplot绘制年度总和柱子时的分组分隔线问题

嘿,我完全懂你碰到的麻烦——原本想画每年value的总和,结果因为带着type的分组映射,柱子被拆成了好几段,还多出了黑色分隔线,完全不是想要的整根柱子效果对吧?别担心,给你两种简单的解决思路:

方法一:先预处理数据,计算年度总和

最稳妥的方式是先把数据聚合到年度级别,去掉type的分组,这样绘图时就不会有多余的分隔线了。用dplyr来做数据汇总超方便:

# 加载需要的包
library(dplyr)
library(ggplot2)

# 计算每年的value总和,忽略type分组
yearly_summary <- df %>%
  group_by(year) %>%
  summarize(total_value = sum(value, na.rm = TRUE)) %>% # na.rm用来忽略缺失值
  ungroup()

# 绘制整根带轮廓的柱子
ggplot(yearly_summary, aes(x = year, y = total_value)) +
  geom_col(
    fill = "#69b3a2", # 填充色可以自己选
    color = "black",  # 柱子轮廓颜色
    size = 1          # 轮廓粗细,数值越大越粗
  ) +
  labs(
    x = "年份",
    y = "年度总值",
    title = "每年Value总和"
  ) +
  theme_bw()

方法二:直接用stat_summary绘制,不保留分组映射

如果你不想提前处理数据,也可以用stat_summary直接在绘图时计算总和,但一定要去掉type相关的映射(比如color = type或者group = type),这样ggplot就不会按分组拆分柱子了:

ggplot(df, aes(x = year, y = value)) +
  stat_summary(
    fun = sum,        # 指定计算总和的函数
    geom = "col",     # 用柱子类型展示
    fill = "#69b3a2",
    color = "black",
    size = 1
  ) +
  labs(
    x = "年份",
    y = "年度总值",
    title = "每年Value总和"
  ) +
  theme_bw()

核心要点就是:只要绘图时不保留type的分组映射,不管是提前汇总数据还是用stat_summary,都能画出整根带完整轮廓的年度总和柱子,不会再出现那些多余的黑色分隔线啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:03:19