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

ggplot2绘制分组柱状图出现多误差棒问题的解决方法

解决ggplot2分组柱状图误差棒重复问题

问题原因

你直接用包含重复观测的原始数据集绘图,每个main+sub分组下存在多个样本数据:

  • geom_bar(stat="identity")会把同一分组的所有观测值叠加显示(柱子实际高度是该分组所有观测值的总和,而非你需要的均值)
  • geom_errorbar会为每个观测值单独绘制误差棒,导致同一位置出现多根重叠的误差棒

解决方案

先按main和sub分组计算TGW的均值,再用均值数据集绘图:

1. 加载依赖包并预处理数据

library(ggplot2)
library(dplyr)

# 你的原始数据集
data <- structure(list(main = c("D1", "D1", "D1", "D1", "D1", "D1", "D1",
"D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1",
"D2", "D2"), Rep. = c(3L, 2L, 1L, 2L, 1L, 3L, 3L, 3L, 3L, 2L,
2L, 3L, 1L, 1L, 2L, 2L, 1L, 1L, 3L, 2L), sub = c("E", "E", "C",
"B", "E", "B", "F", "C", "D", "A", "C", "A", "F", "A", "D", "F",
"B", "D", "B", "E"), TGW = c(53L, 55L, 53L, 57L, 61L, 54L, 47L,
55L, 41L, 61L, 56L, 66L, 50L, 59L, 50L, 55L, 53L, 45L, 59L, 55L
)), row.names = c(NA, 20L), class = "data.frame")

# 计算每个分组的TGW均值
data_summary <- data %>%
  group_by(main, sub) %>%
  summarize(TGW_mean = mean(TGW), .groups = "drop")

# 你已计算好的标准误
se <- 2.85

2. 绘制正确的分组柱状图

p <- ggplot(data_summary, aes(x = main, y = TGW_mean, fill = sub)) +
  geom_bar(stat = "identity", position = position_dodge()) +
  geom_errorbar(aes(ymin = TGW_mean - se, ymax = TGW_mean + se), 
                width = .2, position = position_dodge(.9)) +
  scale_fill_brewer(palette = "Paired") +
  theme_minimal()

print(p)

额外说明

如果你的se是通过model.tables针对模型计算的标准误,需确保它与分组均值匹配(即所有分组se一致,或按分组计算对应标准误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:41:02