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

如何在R的ggplot中制作不堆叠求和的堆叠条形图?

解决方案

问题出在ggplot默认会对同一x和fill分组下的y值自动求和。要实现每个数据行单独堆叠、不合并求和的效果,只需给每个观测添加独立的分组标识,让ggplot将每一行数据视为单独的堆叠元素。

修改后的代码如下:

library(ggplot2)

data <- data.frame(
  col1 = c("A", "A", "B", "B", "B", "C", "D", "D", "D"),
  col2 = c(5, 7, 1, 5, 3, 8, 4, 1, 3),
  col3 = c("grey", "red", "grey", "red", "grey", "grey", "grey", "red", "grey")
)

ggplot(data, aes(x = col1, y = col2, fill = col3, group = row_number())) +
  geom_col() +  # geom_col 等价于 geom_bar(stat = "identity"),写法更简洁
  scale_fill_manual(values = c("grey" = "grey", "red" = "red")) +
  theme_minimal()

代码说明

  • group = row_number():为每一行数据分配唯一的分组ID,强制ggplot不对同x和fill下的y值进行求和,而是将每个观测作为独立的堆叠块。
  • geom_col():替代geom_bar(stat = "identity"),功能完全一致,但语义更清晰,专门用于绘制已知数值的条形图。

运行上述代码后,就能得到你期望的堆叠效果:每个col1分组下,对应的数据行按col3的颜色依次堆叠,数值不会被合并求和。

内容的提问来源于stack exchange,提问作者Yuto Best boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:32:08