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

如何用ggplot在箱线图中区分两种实验条件?

优化箱线图区分Condition1与Condition2的方案

首先需要从现有数据集df的X列中提取出Condition分组信息——原数据中没有直接的Condition列,这是无法区分两种实验条件的核心原因。

步骤1:数据预处理

使用stringr包提取X列中的Condition标识:

library(tidyverse)

# 从X列提取Condition1/Condition2
df <- df %>%
  mutate(condition = str_extract(X, "Condition\\d"))

方案1:并列分组箱线图(同一时间点下区分Condition)

将group与condition组合作为x轴,用fill区分replicate,让同一时间点(Start/X24h)下的两种Condition箱线并列展示,直观对比差异:

ggplot(df, aes(x = interaction(group, condition), y = value, fill = factor(replicate))) +
  geom_boxplot(position = position_dodge(width = 0.8)) +
  scale_x_discrete(labels = c("Start-Cond1", "Start-Cond2", "24h-Cond1", "24h-Cond2")) +
  labs(x = "分组 & 实验条件", y = "数值", fill = "重复样本") +
  theme_bw()

方案2:分面展示(按Condition拆分图表)

如果希望两种Condition的对比更清晰,可按Condition分面,每个面内独立展示不同group和replicate的箱线:

ggplot(df, aes(x = group, y = value, fill = factor(replicate))) +
  geom_boxplot(position = position_dodge(width = 0.8)) +
  facet_wrap(~condition) +
  labs(x = "分组", y = "数值", fill = "重复样本") +
  theme_bw()

方案3:用fill区分Condition,linetype区分Replicate

若核心关注Condition间的差异,可将fill映射为Condition,用linetype区分不同重复样本:

ggplot(df, aes(x = group, y = value, fill = condition, linetype = factor(replicate))) +
  geom_boxplot(position = position_dodge(width = 0.8), color = "black") +
  labs(x = "分组", y = "数值", fill = "实验条件", linetype = "重复样本") +
  theme_bw()

关于df2的补充处理

df2是宽格式数据,若需要整合使用,可先转为长格式:

df2_long <- df2 %>%
  mutate(condition = ifelse(str_detect(X, "Condition2"), "Condition2", "Condition1")) %>%
  pivot_longer(cols = -c(X, condition), names_to = c("group", "replicate"), names_sep = "_") %>%
  mutate(replicate = factor(replicate))

# 可选:合并df与df2_long后统一绘图
combined_df <- bind_rows(df, df2_long)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:04:58