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

如何在同一张图中绘制多模型生存曲线(分两组对比)

合并多个生存曲线到同一张图(保留阶梯样式)

你已经通过survfit拟合了6个模型的生存曲线,并用ggsurvplot生成了单模型曲线,但合并时遇到常规ggplot方法平滑曲线、丢失阶梯结构的问题,以下是可行的解决方案:

方法:提取生存数据后用geom_step手动绘制

生存曲线的阶梯结构需要用geom_step而非geom_line来保留,具体步骤如下:

1. 提取所有模型的生存数据并整理

从每个survfit对象中提取时间、生存概率等核心数据,添加模型标签后合并为统一数据框:

# 提取每个模型的生存曲线数据,添加模型名称标签
surv_data_list <- lapply(names(fit_list), function(model_name) {
  fit_obj <- fit_list[[model_name]]
  data.frame(
    time = fit_obj$time,
    surv_prob = fit_obj$surv,
    model = model_name
  )
})

# 合并为单个数据框
combined_surv_df <- do.call(rbind, surv_data_list)

2. 用ggplot绘制带阶梯的合并生存曲线

使用geom_step绘制曲线,确保保留生存曲线特有的垂直线结构:

library(ggplot2)

ggplot(combined_surv_df, aes(x = time, y = surv_prob, color = model)) +
  geom_step(linewidth = 1) +  # 核心:用geom_step维持阶梯样式
  scale_color_manual(values = colors) +  # 复用你定义的颜色向量
  labs(
    x = "生存时间",
    y = "生存概率",
    color = "模型"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")  # 可调整图例位置

说明

  • geom_step会严格按照生存曲线的逻辑绘制:在事件发生时间点垂直下降,完全匹配survfit生成的阶梯结构,不会出现平滑问题。
  • 这种方法不依赖ggsurvplot的对象,直接基于原始生存数据绘图,灵活性更高,便于后续调整样式(比如添加置信区间、风险表等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:29:51