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

如何用ggplot2在堆叠条形图中添加三组汇总条形

在堆叠条形图中添加汇总条形的方法

嘿,这个需求很好实现,咱们不用单独绘制新图表,只要稍微改造下数据集,就能在同一图里加入汇总各组的条形啦!下面是具体的步骤和代码:

核心思路

我们需要构造一份汇总数据:把原有的三组(carb=1、2、3)的数据合并成一个新的分类(比如叫"All"),然后将这份汇总数据和原数据合并,让ggplot自动把这个新分类作为一个额外的条形展示出来。

修改后的完整代码

library(ggplot2)
ds <- as.data.frame(mtcars)
ds$gear <- as.factor(ds$gear)
ds$carb <- as.factor(ds$carb)
d1 <- ds[ds$carb %in% c("1","2","3"),]

# 构造汇总数据集:复制原数据,将carb标记为"All"
d_all <- d1
d_all$carb <- "All"
# 合并原数据和汇总数据
d_combined <- rbind(d1, d_all)

# 绘制包含汇总的堆叠条形图
ggplot(d_combined, aes(fill = gear, x = carb)) +
  coord_flip() +
  geom_bar(position = position_fill(reverse = TRUE), width = 0.7) +
  # 可选:给汇总条形添加黑色边框,让它更突出
  geom_bar(data = d_all, aes(fill = gear, x = carb),
           position = position_fill(reverse = TRUE), width = 0.7,
           color = "black", size = 1)

代码解释

  1. 构造汇总数据:我们把原数据d1复制一份,把所有行的carb字段改成"All",这样这份数据就代表了三组的整体情况。
  2. 合并数据集:用rbind把原数据和汇总数据合并,得到包含原分类和汇总分类的新数据集d_combined。
  3. 绘制图表:使用合并后的数据集绘图,ggplot会自动在x轴(因为用了coord_flip,实际是y轴)添加"All"这个分类,生成汇总条形。
  4. 可选优化:额外添加一层geom_bar专门给汇总数据加黑色边框,能让汇总条形和其他分类更易区分。

如果你需要的是计数堆叠而非百分比堆叠,只要把position_fill换成position_stack就可以啦,逻辑是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:50:25