如何按期刊要求将森林图汇总列的"."替换为"-"?
替换metafor森林图汇总列的小数点为横杠
需求:按照期刊要求,将森林图最右侧汇总列中的所有小数点"."替换为横杠"-"(例如"0.43"改为"0-43"),基于metafor包实现该调整。
解决方案思路
metafor的forest()函数默认自动生成汇总行文本,无法直接修改小数点格式,因此需要自定义汇总行的文本内容:先提取汇总结果的数值并替换小数点,再手动添加到图中对应位置。
修改后的代码示例
library(metafor) # 导入BCG疫苗荟萃分析数据 dat <- dat.bcg # 计算对数风险比及抽样方差,添加研究标签 dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat, slab=paste(author, year, sep=", ")) # 拟合随机效应模型 res <- rma(yi, vi, data=dat) # 提取汇总结果并替换小数点为横杠 rr_val <- exp(res$b) ci_lb <- exp(res$ci.lb) ci_ub <- exp(res$ci.ub) # 格式化数值(保留两位小数)并替换小数点 rr_formatted <- gsub("\\.", "-", sprintf("%.2f", rr_val)) ci_formatted <- paste(gsub("\\.", "-", sprintf("%.2f", ci_lb)), gsub("\\.", "-", sprintf("%.2f", ci_ub)), sep="-") summary_text <- paste0("RE Model: ", rr_formatted, " (", ci_formatted, ")") # 绘制森林图,预留汇总行位置(mlab="") forest(res, atransf=exp, at=log(c(0.05, 0.25, 1, 4)), xlim=c(-16,6), ilab=cbind(tpos, tneg, cpos, cneg), ilab.lab=c("TB+","TB-","TB+","TB-"), ilab.xpos=c(-9.5,-8,-6,-4.5), cex=0.75, header="Author(s) and Year", mlab="", shade=TRUE) # 添加自定义的汇总文本到右侧汇总列位置 text(x=6, y=res$k+2, pos=2, summary_text, cex=0.75) # 添加分组标签 text(c(-8.75,-5.25), res$k+3, c("Vaccinated", "Control"), cex=0.75, font=2)
代码说明
- 提取并格式化数值:用
exp()将对数尺度的模型结果转换为原始风险比,sprintf()控制小数位数,gsub("\\.", "-", ...)完成小数点到横杠的替换。 - 绘制基础森林图:设置
mlab=""关闭自动生成的汇总文本,预留自定义文本的位置。 - 手动添加汇总文本:通过
text()函数将格式化后的汇总文本放到森林图右侧对应行(y坐标res$k+2对应汇总行位置,x坐标6匹配图的右侧区域)。
内容的提问来源于stack exchange,提问作者Lenman55
相关产品推荐
相关产品推荐

