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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:34:54