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

