如何用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
相关产品推荐
相关产品推荐

