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

求助:在R中用ggplot2绘制分组堆叠组合条形图

解决方案

1. 数据整理(转为长格式)

ggplot2对长格式数据支持更好,先把宽格式的环境变量列转为单列,保留处理组、季节信息:

# 加载依赖包
library(ggplot2)
library(tidyr)
library(dplyr)

# 模拟匹配场景的可复现数据
set.seed(123)
df <- data.frame(
  处理组 = rep(c("处理1", "处理2", "处理3"), each = 2),
  季节 = rep(c("A", "B"), 3),
  变量1 = runif(6, 5, 15),
  变量2 = runif(6, 3, 10)
)

# 转换为长格式
df_long <- df %>%
  pivot_longer(
    cols = c(变量1, 变量2),
    names_to = "环境变量",
    values_to = "数值"
  )

2. 绘制目标图表

通过分组+堆叠的方式实现需求:X轴为处理组,每组下按季节分柱,柱子内部按环境变量堆叠展示贡献:

ggplot(df_long, aes(x = 处理组, y = 数值, fill = 环境变量, group = 季节)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  labs(
    x = "处理组",
    y = "总数值",
    fill = "环境变量"
  ) +
  theme_bw()

代码说明

  • group = 季节:指定按季节分组,让同一处理组下的不同季节柱子并排展示
  • position_dodge(width = 0.8):控制季节柱子间的间距,配合width = 0.7调整整体布局
  • 堆叠效果是geom_col默认行为,自动将同一分组下的环境变量数值累加,颜色区分各变量贡献

如果需要更清晰的季节区分,也可以给柱子添加边框或调整配色:

ggplot(df_long, aes(x = 处理组, y = 数值, fill = 环境变量, group = 季节)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7, color = "black") +
  scale_fill_brewer(palette = "Set2") +
  labs(
    x = "处理组",
    y = "总数值",
    fill = "环境变量"
  ) +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:15:19