R语言如何绘制分组箱线图将9组数据划分为3个类别展示
方案1:基础R
boxplot() 函数实现 首先对原始数据做结构化整合,指定分组映射关系即可实现分组展示:
# 1. 给三个原始数据框添加所属大组标识,假设三个数据框分别对应S/M/E三个大组 df_S$major_group <- "S组" df_M$major_group <- "M组" df_E$major_group <- "E组" # 2. 提取需要的列合并为总数据框 all_df <- rbind( df_S[, c("dN", "dS", "Omega", "major_group")], df_M[, c("dN", "dS", "Omega", "major_group")], df_E[, c("dN", "dS", "Omega", "major_group")] ) # 3. 转换为长格式,把dN/dS/Omega三个指标转为行存储 long_df <- reshape( all_df, direction = "long", varying = list(c("dN", "dS", "Omega")), v.names = "value", timevar = "indicator", times = c("dN", "dS", "Omega") ) # 4. 绘图,通过formula指定分组规则 # 同一大组用同色系区分,可按需调整颜色 col_vec <- c( "#f8766d", "#f8766d80", "#f8766d40", "#00ba38", "#00ba3880", "#00ba3840", "#619cff", "#619cff80", "#619cff40" ) boxplot( value ~ major_group + indicator, data = long_df, main = "分组箱线图", xlab = "分组", ylab = "数值分布", col = col_vec, las = 2 # x轴标签旋转避免重叠 ) # 可选:添加组间虚线分隔三个大组 abline(v = c(3.5, 6.5), lty = 2, col = "gray")
最终输出的9个箱线会按S组3个、M组3个、E组3个自动分组展示。
方案2:
ggplot2 包实现 用ggplot2更推荐长数据格式 + 美学映射的方式实现,代码逻辑更清晰:
library(ggplot2) library(dplyr) library(tidyr) # 1. 合并三个数据框并转长格式 long_df <- bind_rows( df_S %>% mutate(major_group = "S组"), df_M %>% mutate(major_group = "M组"), df_E %>% mutate(major_group = "E组") ) %>% select(dN, dS, Omega, major_group) %>% pivot_longer( cols = -major_group, names_to = "indicator", values_to = "value" ) # 2. 绘图 ggplot(long_df, aes(x = major_group, y = value, fill = indicator)) + geom_boxplot( position = position_dodge(0.8), # 组内箱线间距 alpha = 0.7, notch = TRUE, notchwidth = 0.6 ) + labs( title = "分组箱线图", x = "大组别", y = "数值分布", fill = "指标类型" ) + theme_bw()
如果需要调整分组逻辑,比如x轴展示三个指标、每个指标下分S/M/E三个大组,只需修改映射规则为aes(x = indicator, fill = major_group)即可。
内容的提问来源于stack exchange,提问作者Someone_1313
相关产品推荐
相关产品推荐

