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

如何在metafor包的forest()图x轴下方添加异质性信息?

解决Forest图添加异质性信息位置问题

核心问题原因

默认绘图边距(mar参数)底部空间不足,导致设置更低的y坐标时文本被绘图区域裁剪,而y坐标过高又会跑到x轴上方。

解决方案

方法1:调整绘图边距+精准定位文本

在forest()函数中添加mar参数扩大底部边距,再调整text()的y坐标到合适位置:

# 绘制Forest图,扩大底部边距(mar参数顺序:下、左、上、右)
forest(res2, showweights = TRUE, 
       shade="zebra2", 
       alim=c(log(0.2), log(5)),            
       atransf=exp,
       at = log(c(0.20, 0.25, 0.50, 1.00, 1.50, 2.00, 2.50, 4.00, 5.00)), digits = 2,
       psize=0.75,                       
       xlim=c(-3,3), 
       xlab="Odds ratio", 
       refline=log(1),
       cex=0.9, cex.lab = 0.6, cex.axis = 0.7,
       mar = c(8, 4, 2, 2)
)
# 添加异质性信息,y坐标根据边距微调
text(-3, -2, paste0("Heterogeneity: I² = ", I2, "%, τ² = ", tau2, ", p-value = ", Q_pval), pos=4, cex=0.7)

方法2:利用meta包自带标注(更便捷)

如果使用的是meta包,可直接通过内置参数自动添加异质性信息,无需手动调用text():

forest(res2, showweights = TRUE, 
       shade="zebra2", 
       alim=c(log(0.2), log(5)),            
       atransf=exp,
       at = log(c(0.20, 0.25, 0.50, 1.00, 1.50, 2.00, 2.50, 4.00, 5.00)), digits = 2,
       psize=0.75,                       
       xlim=c(-3,3), 
       xlab="Odds ratio", 
       refline=log(1),
       cex=0.9, cex.lab = 0.6, cex.axis = 0.7,
       print.I2 = TRUE,  # 显示I²统计量
       print.tau2 = TRUE,  # 显示τ²统计量
       print.Q = TRUE,  # 显示Q检验p值
       cex.I2 = 0.7  # 设置文本大小
)

注意事项

  • mar参数的第一个值控制底部边距,数值越大底部预留空间越多,可根据图中研究条目数量微调(比如从6到10)。
  • 手动用text()时,y坐标需根据图的实际内容行数调整,研究条目越多,y轴下限越低,需对应调低text的y值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:13