You need to enable JavaScript to run this app. R语言中如何合并boxplot函数生成的两个独立箱线图
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何合并boxplot函数生成的两个独立箱线图

base R实现两个箱线图合并展示的可运行方案

首先先修正你原代码里的小问题:base R的boxplot()函数识别数据集的参数是data而非dataset,直接跑原代码的第一个绘图语句会因为找不到变量报错。下面所有代码都可以基于你提供的数据集直接运行,不需要读取本地csv。

# 直接加载你提供的内置数据集,无需读本地文件
data3 <- structure(list(CLJ = c(39L, 21L, 43L, 24L, 16L, 28L, 45L, 46L, 
69L, 15L, 38L, 28L, 50L, 51L, 8L, 46L, 25L, 35L, 59L, 24L, 48L, 
44L, 33L, 27L, 51L, 49L, 70L, 53L, 46L, 26L, 49L, 39L, 23L, 52L, 
81L, 36L, 52L, 43L, 19L, 17L, 37L, 68L, 41L, 34L, 22L, 16L, 58L, 
73L, 77L, 37L), accuracy = c(18L, 25L, 23L, 22L, 20L, 14L, 31L, 
20L, 24L, 6L, 24L, 12L, 16L, 24L, 23L, 15L, 14L, 24L, 42L, 19L, 
27L, 13L, 23L, 6L, 28L, 30L, 22L, 33L, 12L, 21L, 38L, 16L, 17L, 
11L, 29L, 18L, 22L, 21L, 29L, 19L, 17L, 28L, 20L, 35L, 14L, 14L, 
35L, 30L, 18L, 37L), group = c("B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "I", "I", "I", "I", "I", "I", 
"I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", 
"I", "I", "I", "I", "I", "I")), row.names = c(NA, 50L), class = "data.frame")

方案1:同画布分栏排布

保留两个箱线图独立的坐标轴、配色,把两个图按行/列拆分在同一个画布上,适配你原来单独绘图的代码习惯,不需要大改逻辑:

  • 核心操作:用base R自带的par()函数调整画布布局参数
  • 可运行代码:
# 设置画布为2行1列的布局(上下摆放两个图),统一调整边距避免标签重叠
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
# 绘制第一个箱线图,去掉下方x轴标签避免和第二个图的标签重复
boxplot(CLJ ~ group, data = data3, col = "orange", na.rm=TRUE, 
        xlab= "", ylab = "CLJ", ylim = c(0, 80), yaxs = "I")
# 绘制第二个箱线图,保留底部x轴标签
boxplot(accuracy ~ group, data = data3, col = "yellow", na.rm=TRUE, 
        xlab = "group", ylab = "accuracy", ylim = c(0, 80), yaxs = "I")
# 绘图完成后恢复默认画布参数,避免影响后续绘图
par(mfrow = c(1,1), mar = c(5,4,4,2))

调整提示:如果需要左右并排摆放两个图,把mfrow = c(2,1)改为mfrow = c(1,2)即可,按需调整标签位置避免文字遮挡。

方案2:单坐标轴并排合并

把两个指标的箱线图整合到同一个坐标轴下,实现同分组下两个指标的箱线并排对比,是更紧凑的合并展示效果:

  • 核心操作:把宽表转为长表,让boxplot识别“指标-分组”的交叉分类
  • 可运行代码:
# 宽转长,把CLJ、accuracy两列合并为单列数值,新增列标记指标类型
data_long <- reshape(
  data3, 
  varying = c("CLJ", "accuracy"), 
  v.names = "value", 
  timevar = "metric", 
  times = c("CLJ", "accuracy"), 
  direction = "long"
)
# 单轴绘制并排箱线图
boxplot(value ~ metric + group, data = data_long, 
        col = c("orange", "yellow"), 
        na.rm = TRUE, 
        ylim = c(0, 80), yaxs = "I",
        xlab = "分组", ylab = "指标数值"
)
# 添加图例区分两个指标的配色
legend("topright", legend = c("CLJ", "accuracy"), fill = c("orange", "yellow"))

效果说明:公式value ~ metric + group会自动按分类组合排列箱线,最终画布上依次展示B组的CLJ、B组的accuracy、I组的CLJ、I组的accuracy四个箱线,配色和你单独绘图的颜色完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 13:45:05