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

如何在R中绘制类似finalfit::or_plot样式的单变量OR森林图?

单变量回归OR森林图(匹配finalfit::or_plot样式)

以下是两种可行的实现方式,直接基于finalfit生成的单变量结果复现目标森林图样式:

方法一:手动整理数据+ggplot复现样式

1. 生成单变量回归结果

用finalfit完成单变量logistic回归,输出标准结果表:

library(finalfit)
library(dplyr)
library(ggplot2)
library(stringr)

# 示例数据集(替换为你的数据即可)
data(colon_s)
uni_results <- colon_s %>% 
  finalfit(
    dependent = "mort_5yr",  # 结局变量
    explanatory = c("age", "sex", "obstruct", "perfor"),  # 待分析的自变量列表
    family = binomial(link = "logit")
  )

2. 提取并整理绘图所需数据

拆分结果表中的OR(95%CI)为数值型的OR、置信区间上下限,同时保留P值:

plot_data <- uni_results %>%
  slice(-1) %>%  # 移除总模型汇总行
  select(variable = `Variable`, or_ci = `OR (95% CI)`, p = `p`) %>%
  mutate(
    or = as.numeric(str_extract(or_ci, "^[0-9.]+")),
    ci_low = as.numeric(str_extract(or_ci, "(?<=\\()[0-9.]+")),
    ci_high = as.numeric(str_extract(or_ci, "[0-9.]+(?=\\))"))
  ) %>%
  mutate(variable = fct_inorder(variable))  # 保持变量顺序与回归结果一致

3. 绘制匹配finalfit样式的森林图

用ggplot复现or_plot的核心样式:横向布局、OR=1参考线、点+误差线、右侧标注OR(95%CI)与P值:

ggplot(plot_data, aes(x = or, y = variable)) +
  # OR=1的灰色虚线参考线
  geom_vline(xintercept = 1, linetype = "dashed", color = "grey50") +
  # 置信区间误差线
  geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.2, color = "#2c3e50") +
  # OR值点(红色,匹配finalfit默认配色)
  geom_point(size = 3, color = "#e74c3c") +
  # 右侧添加OR(95%CI)及P值文本
  geom_text(
    aes(x = ci_high + 0.5, label = paste0(round(or,2), " (", round(ci_low,2), "-", round(ci_high,2), ")\np=", round(p,3))),
    hjust = 0, size = 3.5
  ) +
  # 坐标轴与主题设置
  scale_x_continuous(expand = expansion(mult = c(0.1, 0.2))) +
  labs(x = "Odds Ratio (95% Confidence Interval)", y = "") +
  theme_bw() +
  theme(
    panel.grid.minor = element_blank(),
    panel.grid.major.y = element_blank(),
    axis.text.y = element_text(size = 10),
    axis.title.x = element_text(size = 11)
  )

方法二:修改finalfit::or_plot函数适配单变量模型

如果你想直接复用or_plot的原生逻辑,可修改其内部数据提取规则:

  1. 查看or_plot源码:finalfit::or_plot
  2. 复制源码并调整其中的模型判断逻辑,取消仅支持多变量模型的限制,改为兼容单变量的finalfit结果表
  3. 复用原函数的绘图代码,传入整理好的plot_data即可生成完全一致的样式

内容的提问来源于stack exchange,提问作者Iris Moes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:22:23