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

求助:为多子组绘制带误差棒的柱状图

修复多因子分组误差棒柱状图的语法与逻辑问题

直接语法错误解决

你碰到的Error: unexpected ')'是因为ggplot代码最后一行多了一个冗余的闭合括号,删除最后一个)即可:

错误代码末尾:

geom_errorbar(aes(ymax = ymax, ymin = ymin), position = dodge, width = 0.2))

修正后:

geom_errorbar(aes(ymax = ymax, ymin = ymin), position = dodge, width = 0.2)

完整代码优化(含潜在问题修复)

除了语法错误,代码还有多处逻辑问题会导致绘图不符合预期,以下是适配你需求的完整修正代码:

1. 数据加载与预处理

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

# 注意路径使用正斜杠或双反斜杠
TRIG_rawdata <- read.csv("C:/Users/o_tru/OneDrive/ARP/Metabolites/SUSC metabolites_TrueTRIG_2005-2006_2021.csv")

# 按要求过滤:2005-2006年仅保留雄性数据
TRIG_rawdata <- TRIG_rawdata %>%
  filter(!(Year %in% c("2005", "2006") & Sex != "M"))

# 合并分组变量并创建所需因子
SUSC_TRIG <- TRIG_rawdata %>%
  # 创建Cohort分组
  mutate(Cohort = case_when(
    Age == "HY" & Sex == "F" ~ "HYF",
    Age == "HY" & Sex == "M" ~ "HYM",
    Age == "AHY" & Sex == "F" ~ "AHYF",
    Age == "AHY" & Sex == "M" ~ "AHYM"
  )) %>%
  # 创建Season年份组
  mutate(Season = case_when(
    Year %in% c("2005", "2006") ~ "2005-2006",
    Year == "2021" ~ "2021"
  )) %>%
  # 创建Habitat+Year分组(移除重复的M 2021定义)
  mutate(Habitat_Cohort = case_when(
    Habitat.Type == "Seagrass (hard-bottom)" & Year == "2005" ~ "S-HB 2005",
    Habitat.Type == "Seagrass (hard-bottom)" & Year == "2006" ~ "S-HB 2006",
    Habitat.Type == "Seagrass (soft-bottom)" & Year == "2005" ~ "S-SB 2005",
    Habitat.Type == "Seagrass (soft-bottom)" & Year == "2006" ~ "S-SB 2006",
    Habitat.Type == "Mussel (mixed substrate)" & Year == "2005" ~ "M 2005",
    Habitat.Type == "Mussel (mixed substrate)" & Year == "2006" ~ "M 2006",
    Habitat.Type == "Mussel (mixed substrate)" & Year == "2021" ~ "M 2021"
  ))

2. 计算统计量(匹配绘图分组维度)

# 按Habitat_Cohort、Season、Month分组,计算均值和标准差
df.summary <- SUSC_TRIG %>%
  group_by(Habitat_Cohort, Season, Month) %>%
  summarise(
    TRIG_mean = mean(True.TRIG, na.rm = TRUE),
    TRIG_sd = sd(True.TRIG, na.rm = TRUE),
    ymin = TRIG_mean - TRIG_sd,
    ymax = TRIG_mean + TRIG_sd,
    .groups = "drop"
  )

3. 绘制带误差棒的分组柱状图

# 统一dodge宽度,确保柱状图与误差棒对齐
dodge <- position_dodge(width = 0.75)

ggplot(df.summary, aes(x = Habitat_Cohort, y = TRIG_mean, fill = factor(Month))) +
  geom_bar(stat = "identity", position = dodge, width = 0.65) +
  geom_errorbar(aes(ymin = ymin, ymax = ymax), position = dodge, width = 0.2) +
  # 按年份组分面,贴合预期草图布局
  facet_wrap(~Season) +
  labs(
    x = "Habitat & Year",
    y = "Mean TRIG",
    fill = "Month"
  ) +
  theme_bw()

核心修正说明

  • 数据过滤:落实了2005-2006年仅保留雄性样本的要求
  • 变量覆盖修复:避免了SUSC_TRIG被重复赋值覆盖之前计算的Cohort变量
  • 分组逻辑对齐:统计量计算时加入Season和Month分组,确保绘图时变量存在且匹配
  • 视觉对齐:统一误差棒与柱状图的偏移宽度,避免错位
  • 变量映射修正:将y轴映射为统计后的均值TRIG_mean,而非原始数据列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:41:38