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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:56:01