You need to enable JavaScript to run this app. R语言multcompBoxplot绘制并排箱线图par(mfrow)失效问题问询
优惠活动
大模型
产品
解决方案
定价
更多

R语言multcompBoxplot绘制并排箱线图par(mfrow)失效问题问询

原因说明

multcompBoxplot 基于R的grid绘图系统实现,而par(mfrow)等布局参数仅对Base R基础绘图系统生效,因此无法实现并排展示的效果。

可行解决方案

方法1:借助gridExtra包实现(代码更简洁)

先安装gridExtra包(仅需安装一次),调用grid.arrange函数排版,修改后的代码如下:

library(multcompView)
library(gridExtra)
data(cholesterol)
cholesterol$trt3 <- with(cholesterol, factor(
  as.character(trt), levels=levels(trt)[c(5:4,1:3)]))
# 生成绘图对象,returnGrob设为TRUE返回可排版的grob结构
p1 <- multcompBoxplot(response ~ trt3, cholesterol,
                sortFn=NULL, returnGrob = TRUE)
p2 <- multcompBoxplot(response ~ trt3, cholesterol,
                sortFn=NA, returnGrob = TRUE)
# 1行2列并排输出
grid.arrange(p1$grob, p2$grob, nrow = 1)

方法2:使用grid原生视口实现(无需额外安装扩展包)

如果不想安装额外依赖,可以直接调用grid包的原生视口功能实现布局:

library(multcompView)
library(grid)
data(cholesterol)
cholesterol$trt3 <- with(cholesterol, factor(
  as.character(trt), levels=levels(trt)[c(5:4,1:3)]))
p1 <- multcompBoxplot(response ~ trt3, cholesterol,
                sortFn=NULL, returnGrob = TRUE)
p2 <- multcompBoxplot(response ~ trt3, cholesterol,
                sortFn=NA, returnGrob = TRUE)
# 创建1行2列布局视口
pushViewport(viewport(layout = grid.layout(1, 2)))
# 第一列绘制第一个图
print(p1$grob, vp = viewport(layout.pos.col = 1, layout.pos.row = 1))
# 第二列绘制第二个图
print(p2$grob, vp = viewport(layout.pos.col = 2, layout.pos.row = 1))
# 退出视口
upViewport()

内容的提问来源于stack exchange,提问作者H. Hsiao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:06:03