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

如何在R的累积发生率图中添加中位线并保留风险表/累积事件表

解决方案

问题原因

surv.median.line 参数是为生存曲线(y轴为生存概率)设计的,当通过 fun = function(x) 1-x 将曲线转换为累积发生率后,该参数的内部计算逻辑会冲突,导致报错。直接修改 myplot$plot 后单独输出,只会显示绘图部分,因为此时返回的是单个ggplot对象,而非包含风险表、累积事件表的ggsurvplot复合对象。

解决步骤

  1. 计算中位累积发生率对应的时间(即中位生存时间,因为累积发生率=1-生存概率,当累积发生率达0.5时,对应生存概率0.5)
  2. 修改ggsurvplot对象中的plot元素,添加中位线
  3. 直接输出完整的ggsurvplot对象,即可同时保留绘图、风险表和累积事件表

完整代码

library(survival)
library(survminer)

# 拟合KM模型
km.fit <- survfit(Surv(rfstime, status) ~ 1, data = gbsg)

# 计算中位生存时间(对应累积发生率0.5的时间点)
median_time <- summary(km.fit)$table["median"]

# 生成包含风险表和累积事件表的基础图
myplot <- ggsurvplot(km.fit, 
                     fun = function(x) 1-x, 
                     data = gbsg, 
                     censor = FALSE, 
                     conf.int = TRUE,
                     risk.table = TRUE, 
                     cumevents = TRUE, 
                     ylab = "Cumulative Incidence")

# 给plot部分添加中位线(水平+垂直)
myplot$plot <- myplot$plot + 
  geom_segment(aes(x = 0, xend = median_time, y = 0.5, yend = 0.5), 
               linetype = "dashed", color = "darkred") +
  geom_segment(aes(x = median_time, xend = median_time, y = 0, yend = 0.5), 
               linetype = "dashed", color = "darkred")

# 输出完整图(含风险表和累积事件表)
print(myplot)

说明

  • 用summary(km.fit)$table["median"]自动计算中位时间,避免硬编码数值,适配不同数据集
  • 修改myplot$plot后直接打印myplot,会保留ggsurvplot对象的复合结构,同时显示三个部分
  • 可根据需求调整中位线的颜色、线型等参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:17:21