如何叠加contsurvplot包plot_surv_at_t生成的两幅生存曲线图?
解决方案:将两种生存曲线叠加到同一幅图
要实现肿瘤大小对两种生存率的叠加展示,核心思路是先提取两个模型的预测数据,再用ggplot2手动合并绘制,具体步骤如下:
1. 提取预测数据
使用contsurvplot包的get_surv_at_t函数(而非绘图函数plot_surv_at_t),分别获取两个模型在指定时间点的生存预测数据,同时添加分组标签区分两种生存类型:
library(survival) library(contsurvplot) library(ggplot2) library(dplyr) # 确保模型和数据对象一致(注意原代码中data和data1的笔误,统一为data1) model1 <- coxph(Surv(Time_To_Recurrence,Recurrence) ~ Tumor_Size, data = data1, x=TRUE) model2 <- coxph(Surv(CSS,Cancer_Death) ~ Tumor_Size, data = data1, x=TRUE) # 提取5年无复发生存率数据并添加分组标签 surv_data_rfs <- get_surv_at_t(time = "Time_To_Recurrence", status = "Recurrence", variable = "Tumor_Size", data = data1, model = model1, t=60) %>% mutate(Survival_Type = "5年无复发生存率") # 提取5年癌症特异性生存率数据并添加分组标签 surv_data_css <- get_surv_at_t(time = "CSS", status = "Cancer_Death", variable = "Tumor_Size", data = data1, model = model2, t=60) %>% mutate(Survival_Type = "5年癌症特异性生存率") # 合并两个数据集 combined_data <- bind_rows(surv_data_rfs, surv_data_css)
2. 绘制叠加曲线
用ggplot2将两条生存曲线绘制在同一坐标系中,同时添加置信区间增强可视化效果:
ggplot(combined_data, aes(x = x, y = surv, color = Survival_Type)) + # 绘制生存曲线 geom_line(linewidth = 1) + # 绘制半透明置信区间填充 geom_ribbon(aes(ymin = lower, ymax = upper, fill = Survival_Type), alpha = 0.2, color = NA) + # 设置坐标轴和图例标签 labs(x = "肿瘤大小", y = "生存率", color = "生存类型", fill = "生存类型") + # 使用简洁的主题样式 theme_bw()
关键说明
get_surv_at_t是contsurvplot包中专门用于提取预测数据的函数,返回结果包含自变量(x即肿瘤大小)、预测生存率(surv)以及置信区间上下限(lower/upper)。- 通过
Survival_Type分组变量,ggplot2可自动区分两条曲线的颜色和填充样式,生成清晰的图例。 - 需确保原代码中
data和data1为同一数据对象,避免数据不匹配导致的错误。
内容的提问来源于stack exchange,提问作者user2930701
相关产品推荐
相关产品推荐

