如何在Kaplan-Meier曲线末端(3年时点)添加事件发生率?
在Kaplan-Meier曲线末端(3年时)添加事件发生率
问题描述
我需要在Kaplan-Meier曲线的末端(即3年/36个月时)添加对应组别的事件发生率数值,期望效果为曲线末端直接标注百分比数值。以下是我的示例数据库及现有代码:
library(ggsurvfit);library(ggplot2); library(survival); library(survminer) BMT<-data(BMT) fit <- survfit(Surv(ftime/12, status >0)~ dis, data= BMT) summary(fit,times=c(1,2,3)) a<-ggsurvplot(fit, fun= "event", xlim = c(0,3), xlab="Time (Months)",#axes.offset = F, break.x.by =0.5,#xscale = "d_m", ylim=c(0,0.90), ylab="Primary outcome (%)", risk.table = T, # risk.table.col = "strata", risk.table.pos="out", risk.table.y.text = F, legend=c(0.15,0.8), #legend=c(0,1), cumevents=F, cumevents.title ="Cumulative events", cumevents.col ="strata", cumevents.y.text=F,censor=F, legend.labs = c("No","Yes"), legend.title = "Diseased", conf.int = F, conf.int.style = "ribbon", pval = F, pval.coord = c(2,0.2), tables.height = 0.2, tables.theme = theme_cleantable(), data = BMT, palette = c("blue4","red4") );a ### Change y axis to be in percent a$plot<-a$plot+scale_y_continuous(limits = c(0, 0.9), breaks = seq(0,0.9,by=0.1), labels = seq(0,90,by=10))+ scale_x_continuous(breaks = c(0,0.5,1,1.5,2,2.5,3), labels = c(0,6,12,18,24,30,36));a
解决方案
通过提取survfit模型在3年时的事件发生率数据,再用geom_text将数值标注到曲线末端,具体步骤如下:
1. 提取3年时的事件发生率数据
# 从survfit结果中提取3年(time=3)的统计信息 surv_summary <- summary(fit, times = 3) # 整理标注用的数据框:包含分组、x坐标、y坐标(事件发生率)、标注文本 label_data <- data.frame( dis = factor(surv_summary$strata, labels = c("No", "Yes")), x = rep(3, length(surv_summary$strata)), # x对应3年,和原绘图的x轴刻度一致 y = 1 - surv_summary$surv, # 原绘图用fun="event",事件发生率=1-生存率 label = paste0(round((1 - surv_summary$surv)*100, 1), "%") # 转成百分比格式 )
2. 修改绘图代码添加标注
在原有坐标轴修改的基础上,添加geom_text实现末端标注:
a$plot <- a$plot + scale_y_continuous(limits = c(0, 0.9), breaks = seq(0,0.9,by=0.1), labels = seq(0,90,by=10)) + scale_x_continuous(breaks = c(0,0.5,1,1.5,2,2.5,3), labels = c(0,6,12,18,24,30,36)) + # 添加末端标注,x轴轻微偏移避免和曲线重叠,颜色与分组对应 geom_text(data = label_data, aes(x = x + 0.05, y = y, label = label, color = dis), inherit.aes = FALSE, size = 4) + # 保持和原曲线一致的颜色方案 scale_color_manual(values = c("blue4", "red4")) # 查看最终绘图 a
3. 可选细节调整
- 若标注位置不合适,可修改
x = x + 0.05中的偏移量,比如x = x或x = x + 0.1 - 调整标注大小可修改
size参数 - 若不想重复显示颜色图例,可添加
guides(color = "none")到a$plot的修改代码中
内容的提问来源于stack exchange,提问作者Mohamed Rahouma
相关产品推荐
相关产品推荐

