如何在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
相关产品推荐
相关产品推荐

