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

如何在ggplot中制作非累积重叠堆叠柱状图

解决方案

问题回顾

给定数据:

df <- tibble::tribble(
  ~x, ~yvalue, ~variable,
  "a", 1,  "red",
  "a", 2,  "blue",
  "b", 1,  "red",
  "b", 3,  "blue",
  "b", 0, "blue"
)

需要制作每个x值下不同颜色柱子重叠而非累积堆叠的柱状图,即每个柱子高度为自身的yvalue,而非累加上方柱子高度。当前geom_col默认生成累积堆叠图,不符合需求。

解决步骤

1. 核心修正:取消累积堆叠

通过position = position_identity()取消默认的累积堆叠逻辑,让每个柱子独立绘制在同一x位置,同时修正y轴映射为数据中的yvalue列:

library(ggplot2)

ggplot(data = df, aes(x = x, y = yvalue, fill = variable)) +
  geom_col(position = position_identity(), width = 0.8, alpha = 0.7)
  • position = position_identity():让柱子按原始位置绘制,不进行堆叠或偏移,实现重叠效果。
  • width = 0.8:调整柱子宽度,避免超出x轴刻度范围。
  • alpha = 0.7:设置透明度,便于区分重叠的不同颜色柱子。

2. 可选:处理重复分组数据

观察数据中x='b'对应两个blue的行,若需为每个x+variable组合保留单一值(如取最大值或求和),可先聚合数据:

library(dplyr)

df_agg <- df %>%
  group_by(x, variable) %>%
  summarise(yvalue = max(yvalue), .groups = "drop") # 可根据需求替换为sum等聚合方式

# 用聚合后的数据绘图
ggplot(data = df_agg, aes(x = x, y = yvalue, fill = variable)) +
  geom_col(position = position_identity(), width = 0.8, alpha = 0.7)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:05:58