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

