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

ggsurvplot添加生存曲线末端标注后风险表错位问题

解决生存曲线与风险表对齐问题并添加末端生存百分比

问题分析

你尝试在生存曲线末端添加生存百分比时,直接修改my_plot$plot的坐标轴设置,破坏了ggsurvplot内置的布局对齐逻辑——因为ggsurvplot返回的是包含生存图、风险表的复合对象,单独修改子图的坐标范围会导致两者宽度匹配失效,最终出现生存图宽度小于风险表、边缘不对齐的情况(表现为生存图左右边缘与下方风险表无法对齐)。

修复方案

以下提供两种可行方法,既能添加末端生存百分比,又能保持生存图与风险表的布局对齐:

方法一:曲线末端直接添加文本标注(推荐)

无需修改坐标轴,直接在曲线终点位置标注百分比,避免破坏布局:

library(survival)
library(survminer)
library(ggplot2)

fit <- survfit(Surv(time, status) ~ sex, data = lung)
time_cutoff = 600

# 计算目标时间点的生存百分比
survs <- summary(fit, times = time_cutoff)$surv
labels <- paste(round(survs*100), '%', sep='')
# 提取曲线在目标时间点的坐标数据
plot_data <- fortify(fit)
plot_data_cutoff <- subset(plot_data, time == time_cutoff)

# 生成基础生存图,统一设置x轴范围
my_plot <- ggsurvplot(fit, data = lung,
                      risk.table = TRUE,
                      tables.height = 0.2,
                      ggtheme = theme_bw(),
                      xlim = c(0, time_cutoff)
)

# 在曲线末端添加文本标注,扩展x轴空间避免文本被截断
my_plot$plot <- my_plot$plot +
  geom_text(data = plot_data_cutoff, 
            aes(x = time, y = surv, label = labels),
            hjust = -0.2, vjust = 0.5, size = 4) +
  coord_cartesian(xlim = c(0, time_cutoff + 100), clip = 'off')

my_plot

方法二:同步调整双坐标轴与风险表的范围

如果坚持使用双坐标轴,需要同步修改风险表的x轴范围,保证两者宽度一致:

library(survival)
library(survminer)

fit <- survfit(Surv(time, status) ~ sex, data = lung)
time_cutoff = 600
survs <- summary(fit, times=time_cutoff)$surv
labels <- paste(round(survs*100), '%', sep='')

# 生成基础生存图
my_plot <- ggsurvplot(fit, data = lung,
                      risk.table = TRUE,
                      tables.height = 0.2,
                      ggtheme = theme_bw()
)

# 修改生存图的坐标轴设置
my_plot$plot <- my_plot$plot + 
  coord_cartesian(ylim=c(0,1), xlim = c(0,time_cutoff), clip = 'on', expand=FALSE) +
  scale_y_continuous(name=NULL, sec.axis=sec_axis(~., name=NULL, breaks = survs, labels= labels))

# 同步调整风险表的x轴范围,确保与生存图宽度匹配
my_plot$table <- my_plot$table +
  coord_cartesian(xlim = c(0, time_cutoff), expand=FALSE)

my_plot

关键提示

  • ggsurvplot的复合组件(生存图、风险表)需要统一调整参数才能保持布局对齐,不要单独修改子图的坐标设置。
  • 方法一的文本标注方式更符合生存分析可视化的常规规范,也不会引入双坐标轴的潜在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:10:20