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

