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

如何用R语言设置同尺度双箱线图(含同图实现方法)

如何让箱线图使用相同尺度并整合展示?

我懂你的需求啦——现在你用par(mfrow=c(1,2))把两个箱线图并排,但想要它们Y轴(IQ)用完全一致的尺度,甚至能把两个分组的箱线图放在同一个坐标轴里更方便对比对吧?下面给你两种适配的解决方案:

方案一:基于你正在用的基础R绘图

1. 让并排的两个图统一Y轴尺度

首先先计算所有IQ数据的全局范围,这样两个图的Y轴就用这个固定范围,保证尺度完全一致:

# 先算出所有IQ值的最小和最大值,确定统一Y轴范围
y_global_range <- range(IQ)
myCols <- c("#E63946", "#457B9D") # 替换成你实际用的颜色向量

# 设置并排画布
par(mfrow=c(1,2))
# 绘制宫内感染的箱线图,指定ylim用全局范围
plot(age.group[in.utero=="yes"], IQ[in.utero=="yes"], 
     xlab="Age group tested", ylab="IQ", 
     main = "Infected in Utero", col=myCols,
     ylim = y_global_range)
# 绘制感染>5年的箱线图,同样用全局Y轴范围
plot(age.group[in.utero=="no"], IQ[in.utero=="no"], 
     xlab="Age group tested", ylab="IQ", 
     main = "Infected >5 Years", col=myCols,
     ylim = y_global_range)

2. 把两个分组的箱线图放到同一个坐标轴里

如果想直接在同一图里对比不同感染状态的IQ,基础R可以用boxplot的公式语法,自动统一尺度:

# 先创建一个合并的感染分组变量
data$infection_status <- ifelse(data$in.utero == "yes", "In Utero", "Infected >5 Years")

# 绘制同一图中的分组箱线图
boxplot(IQ ~ age.group + infection_status, data = data,
        xlab="Age Group & Infection Status", ylab="IQ",
        col=rep(myCols, each=length(unique(data$age.group))), # 给同年龄组的不同感染状态分配颜色
        main="IQ Distribution by Age and Infection Status")

方案二:用ggplot2实现(更简洁直观)

ggplot2天生擅长这种分组可视化,代码更清晰,而且自动帮你统一所有图形的尺度:

library(ggplot2)

ggplot(data, aes(x=age.group, y=IQ, fill=infection_status)) +
  geom_boxplot(position=position_dodge(width=0.8)) + # 让同一年龄组的两个箱线并排
  labs(x="Age group tested", y="IQ", title="IQ by Age Group and Infection Status") +
  scale_fill_manual(values=myCols) + # 自定义颜色
  theme_bw() # 用简洁的主题

这样的图里,所有箱线都在同一坐标轴下,Y轴尺度完全统一,还能直接对比同一年龄组内不同感染状态的IQ差异,对比起来更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:13