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

如何在R的ggsurvplot_facet中添加总体人群生存曲线?

在ggsurvplot_facet分面中添加全局总体生存曲线的解决方案

可以实现,ggsurvplot_add_all失效的原因是它会自动继承分面的过滤逻辑,导致每个分面里的“总体”是该分面子集的汇总,而非全局数据集的总体生存曲线。以下是具体实现步骤:

步骤1:拟合全局总体生存曲线

先基于完整数据集拟合无分组的生存曲线,并提取可用于ggplot绘图的数据:

library(survminer)
library(survival)

# 预处理数据
lung$ecog <- ifelse(lung$ph.ecog == 0, 0, 1)

# 拟合按sex分组的生存曲线(原需求)
fit <- surv_fit(Surv(time, status) ~ sex, data = lung)
# 拟合全局总体生存曲线(不区分任何分组)
fit_all <- surv_fit(Surv(time, status) ~ 1, data = lung)
# 提取全局生存曲线的绘图数据
df_all <- surv_summary(fit_all, data = lung)

步骤2:在分面图中叠加全局曲线

直接在ggsurvplot_facet生成的ggplot对象上手动添加全局曲线图层:

# 生成分面生存曲线
fig_os <- ggsurvplot_facet(fit, data = lung, facet.by = 'ecog')

# 叠加全局生存曲线及置信区间(可选)
fig_os$plot <- fig_os$plot +
  # 全局生存曲线(黑色虚线区分)
  geom_step(data = df_all, aes(x = time, y = surv), 
            color = "black", linetype = "dashed", linewidth = 1) +
  # 全局曲线的置信区间(可选)
  geom_ribbon(data = df_all, aes(x = time, ymin = lower, ymax = upper),
              fill = "black", alpha = 0.1) +
  # 更新图例,添加全局曲线的标签
  scale_color_manual(values = c("1" = "#F8766D", "2" = "#00BFC4", "Overall" = "black"),
                     labels = c("Sex 1", "Sex 2", "Overall")) +
  scale_linetype_manual(values = c("1" = "solid", "2" = "solid", "Overall" = "dashed"),
                        labels = c("Sex 1", "Sex 2", "Overall"))

# 显示最终图形
print(fig_os)

关键说明

  • fit_all基于完整数据集拟合,确保每个分面中显示的都是全局人群的生存趋势,不受分面变量ecog的过滤影响。
  • 通过geom_step和geom_ribbon手动控制全局曲线的样式,可根据需求调整颜色、线型、透明度等参数。
  • 更新图例是为了让全局曲线的标识清晰,避免与分组曲线混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:11:00