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

如何使用bpDir包实现两幅CircularBoxplot并排展示?

问题分析与解决办法

问题根源

bpDir包的CircularBoxplot函数内部大概率包含了重置绘图参数的代码(比如直接调用par()恢复默认设置,或者用dev.new()新建绘图设备),这会直接冲掉你提前设置的par(mfrow = c(1,2))布局,导致第二幅图直接覆盖第一幅。

可行解决办法

方法1:用layout()替代par(mfrow)

layout()的布局控制逻辑更独立,不容易被函数内部的参数修改干扰,代码示例:

library(bpDir)
require(circular)
require(plotrix)
data(fisherB12c)

# 设置1行2列的布局
layout(matrix(1:2, nrow = 1))
# 绘制第一幅环形箱线图
CircularBoxplot(fisherB12c, template = "geographics")
# 绘制第二幅(替换成你需要的数据集或参数即可)
CircularBoxplot(fisherB12c, template = "geographics")
# 恢复默认布局
layout(1)

方法2:手动指定绘图区域

通过par(fig)手动定义每个图的位置范围,彻底绕开函数内部的布局干扰:

library(bpDir)
require(circular)
require(plotrix)
data(fisherB12c)

# 绘制左半部分的图
par(fig = c(0, 0.5, 0, 1), new = FALSE)
CircularBoxplot(fisherB12c, template = "geographics")
# 绘制右半部分的图,new=TRUE表示在当前设备上叠加绘图
par(fig = c(0.5, 1, 0, 1), new = TRUE)
CircularBoxplot(fisherB12c, template = "geographics")
# 恢复默认绘图区域设置
par(fig = c(0, 1, 0, 1), new = FALSE)

方法3:修改函数内部代码(谨慎操作)

在R控制台输入CircularBoxplot查看函数源码,如果发现里面有par()重置或者dev.new()的语句,可以复制源码到本地,注释掉这些干扰布局的代码,然后重新定义这个函数。比如:

# 复制原函数代码,注释掉干扰布局的行
my_CircularBoxplot <- function(...) {
  # 原函数代码,去掉par()重置或dev.new()的语句
  # 比如如果有par(mfrow=c(1,1))这类行,直接注释掉
  # ... 原函数其他代码 ...
}
# 用修改后的函数绘图
par(mfrow = c(1,2))
my_CircularBoxplot(fisherB12c, template="geographics")
my_CircularBoxplot(fisherB12c, template="geographics")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:14:53