求助:在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
相关产品推荐
相关产品推荐

