如何在同一张图中绘制多模型生存曲线(分两组对比)
合并多个生存曲线到同一张图(保留阶梯样式)
你已经通过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
相关产品推荐
相关产品推荐

