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

如何在ggsurvfit生存曲线y轴显示分位数的百分比生存概率

解决ggsurvfit分位数线显示生存概率百分比的方法

要在add_quantile添加的x=5垂直线旁显示对应生存概率的百分比,需要手动提取每个分组在该时间点的生存概率,再添加文本标注,具体步骤如下:

1. 提取目标时间点的生存概率

先拟合生存模型,再根据数据情况提取或插值计算每个分组在time=5时的生存概率,转换为百分比格式:

library(tidyverse)
library(ggsurvfit)
library(survival)

# 拟合生存模型
fit <- survfit2(Surv(time, status) ~ surg, data = df_colon)

# 情况1:如果time=5是模型输出中的精确时间点,直接提取
surv_prob_5 <- broom::tidy(fit) %>%
  filter(time == 5) %>%
  mutate(surv_pct = round(surv * 100, 1))

# 情况2:如果time=5不在模型的时间点中,用插值计算(保持KM曲线阶梯特性)
surv_prob_5 <- purrr::map_dfr(fit$strata, function(strat_data) {
  surv_interp <- approxfun(
    x = strat_data$time, 
    y = strat_data$surv,
    method = "constant",
    f = 1
  )
  surv_val <- surv_interp(5)
  tibble(
    surg = names(strat_data),
    surv = surv_val,
    surv_pct = round(surv_val * 100, 1)
  )
})

2. 绘图并添加百分比标注

在原有绘图代码基础上,用geom_text将提取好的百分比文本定位到垂直线与生存曲线的交点位置:

fit %>%
  ggsurvfit(linewidth = 0.8) +
  add_censor_mark(size = 2, alpha = 0.2) +
  add_quantile(x_value = 5, color = "grey30", linewidth = 0.8) +
  # 添加百分比标注,调整位置避免与线条重叠
  geom_text(
    data = surv_prob_5,
    aes(x = 5, y = surv, label = paste0(surv_pct, "%")),
    color = "grey30",
    vjust = -0.5, # 向上偏移文本
    hjust = 0.5,
    size = 3.5
  ) +
  scale_ggsurvfit()

说明

add_quantile仅负责绘制垂直线,不会自动标注对应y轴数值。通过提取/插值获取生存概率后,用geom_text完成标注,就能实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:55:04