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

metafor包绘制森林图时移动右侧效应估计值列的方法

metafor森林图效应值列位置调整方法

首先明确:forest()函数默认显示在最右侧的Odds Ratio效应值列不是固定不可调整的,完全可以通过参数自定义位置,实现你需要的「OR列移至Diff [95% CI]列旁对齐、森林图图形主体移至绘图区最右侧」的效果。

核心调整逻辑

默认的最右侧效应值列是函数自动生成的注释列,只要关闭这个默认列,手动将格式化好的OR(95%CI)作为自定义信息列加到目标位置,再重新分配画布左右区域的占比即可:

  • 加annotate = FALSE参数,关闭默认生成的最右侧效应值注释列
  • 提前格式化每个研究的OR及95%CI文本,和你已有的分组、Diff列合并作为自定义ilab列,放在Diff列相邻位置
  • 调整xlim、ilab.xpos、textpos参数,把所有文字信息列放在画布左侧区域,把森林图(效应点+置信区间+坐标轴)的展示区域挪到画布最右侧
  • 对应调整表头文本的坐标,匹配新的列位置

修改后可直接运行的代码

# Forest plot of odds ratio
options(na.action = "na.pass")

# 提前格式化OR(95%CI)展示文本,作为自定义信息列
or_col <- paste0(
  formatC(exp(res.or$yi), digits = 2, format = "f"),
  " [",
  formatC(exp(res.or$ci.lb), digits = 2, format = "f"),
  ", ",
  formatC(exp(res.or$ci.ub), digits = 2, format = "f"),
  "]"
)

forest(res.or,
       addpred = TRUE, header = TRUE,
       atransf = exp, 
       annotate = FALSE, # 关键:关闭默认在最右侧生成的效应值列
       order = ormri$year,
       xlim = c(-22, 8), # 调整x轴整体范围,右侧预留森林图展示空间
       ilab = cbind(m1$hiv, m1$con, m1$diffci, or_col), # 合并所有信息列
       ilab.xpos = c(-18, -14, -9, -4), # 统一设置所有信息列的x坐标,全部放在左侧区域
       ilab.pos = rep(2, 4), # 所有信息列右对齐,和表头匹配
       mlab = "",
       digits = 2, cex = 0.75,
       col = "blue",
       xlab = "Odds Ratio",
       at = log(c(0.1, .25, 1, 10, 100)),
       textpos = c(-22, -2) # 划定左侧文字区域边界,避免和右侧森林图重叠
) 

# 调整表头坐标,匹配新的列位置
text(c(-19.5, -15.5, -10.5, -5.5), res.or$k + 2.5, 
     c("LGE+/N (%)", "LGE+/N (%)", "Diff [95% CI]", "OR [95% CI]"), 
     cex = 0.75)
text(c(-19.5, -15.5), res.or$k + 3.5, c("HIV+", "HIV -"), font = 2, cex = 0.75)

# 添加异质性检验统计量
text(-22, -1, pos = 4, cex = 0.75, bquote(paste("RE Model (Q = ",
                                              .(formatC(res.or$QE, digits=2, format="f")), ", df = ", .(res.or$k - res.or$p),
                                              ", p = ", .(formatC(res.or$QEp, digits=2, format="f")), "; ", I^2, " = ",
                                              .(formatC(res.or$I2, digits=1, format="f")), "%)")))

微调提示

代码里的ilab.xpos、xlim数值可以根据你的实际列宽、森林图缩放需求灵活调整:

  • 如果某列文字过长重叠,把对应列的ilab.xpos数值往左侧适当偏移即可
  • 如果需要更宽的森林图展示区域,适当增大xlim的右边界数值,同步调整at参数对应的坐标轴刻度位置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:09:13