如何在R语言中调整HR森林图:添加竖线、权重及HR数值
解决R语言森林图添加竖线、权重百分比及HR数值展示问题
下面分别用meta包和forestplot包给出具体实现代码,覆盖你需要的三个核心需求:
方法一:使用meta包(适合自带权重计算的meta分析场景)
meta包会自动计算研究权重,且内置森林图功能,能快速实现需求:
1. 准备数据
先构造示例HR数据:
# 加载包 library(meta) # 示例数据:研究名称、HR值、95%CI上下限 study_names <- c("Study A", "Study B", "Study C", "Study D", "Study E") hr <- c(0.85, 1.20, 0.78, 1.05, 0.92) ci_lower <- c(0.62, 0.95, 0.56, 0.82, 0.71) ci_upper <- c(1.16, 1.52, 1.08, 1.34, 1.19) # 创建meta对象(HR需对数转换后用于分析) met_analysis <- metagen(TE = log(hr), seTE = (log(ci_upper) - log(ci_lower))/(2*1.96), studlab = study_names, comb.fixed = TRUE, # 可选固定/随机效应模型 sm = "HR")
2. 绘制满足需求的森林图
forest(met_analysis, # 添加HR=1的竖线 lwd.zero = 2, # 竖线粗细 col.zero = "black", # 竖线颜色 # 显示权重百分比 print.weight = TRUE, weight.study = "random", # 指定权重计算模型 # 显示HR数值及95%CI digits = 2, # 保留两位小数 smlab = "Hazard Ratio (95% CI)", xlab = "Hazard Ratio", leftcols = c("studlab", "weight"), # 左侧列:研究名称+权重 rightcols = c("effect", "ci"), # 右侧列:HR值+95%CI rightlabs = c("HR", "95% CI"))
方法二:使用forestplot包(更灵活的自定义场景)
如果需要自由调整布局样式,forestplot包适配性更强:
1. 准备数据
library(forestplot) # 示例权重百分比(若为meta分析,可从meta对象提取后转换) weight_pct <- c(18, 22, 20, 19, 21) # 构造HR+95%CI的文本标签 hr_ci_text <- paste0(hr, " (", ci_lower, "-", ci_upper, ")") # 构建森林图所需的标签矩阵 plot_data <- rbind( c("", "HR (95% CI)", "Weight (%)"), cbind(study_names, hr_ci_text, weight_pct) )
2. 绘制森林图
forestplot(labeltext = plot_data, # 传入HR和CI的数值数据 mean = c(NA, hr), lower = c(NA, ci_lower), upper = c(NA, ci_upper), # 添加HR=1的竖线 zero = 1, lwd.zero = 2, col.zero = "black", # 自定义元素样式 col = fpColors(box = "red", line = "darkred", summary = "darkblue"), xlab = "Hazard Ratio", align = c("left", "center", "center"), txt_gp = fpTxtGp(label = gpar(fontsize = 10)), # 标记表头行 is.summary = c(TRUE, rep(FALSE, length(study_names))))
若需自动计算权重,可从meta对象提取转换:
weight_pct <- round(met_analysis$w.random, 1)
核心参数说明
- 添加HR=1竖线:
meta包用lwd.zero/col.zero控制;forestplot包用zero=1指定竖线位置 - 展示权重百分比:
meta包直接开启print.weight=TRUE;forestplot需预先计算权重并传入标签矩阵 - 显示HR数值:
meta包通过rightcols配置显示列;forestplot需预先构造HR+CI的文本标签
内容的提问来源于stack exchange,提问作者Metadesperado
相关产品推荐
相关产品推荐

