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

如何基于提取的survfit结果数据表用ggplot2重建KM生存曲线?

R语言基于预提取的KM数据集用ggplot2绘制生存曲线

实现步骤

需要用到的依赖包为ggplot2,如果使用data.table存储数据可同时加载data.table。

步骤1:补充KM曲线起始点

KM曲线默认从时间0、生存率1的位置开始,需要先给现有数据集补充起始记录:

# 加载所需包
library(ggplot2)
library(data.table)

# 你提供的示例KM数据集
km_data <- data.table(time = c(72, 109, 143),
                      n.risk = c(80, 77, 76),
                      n.event = c(1, 1, 2),
                      n.censor = c(3, 2, 0),
                      surv = c(0.9875, 0.974675324675325, 0.949025974025974),
                      strata = c(0, 0, 0),
                      type = "right")

# 补充起始行:时间为0时生存率为1
km_plot_data <- rbind(
  data.table(time = 0, surv = 1, strata = unique(km_data$strata)),
  km_data[, .(time, surv, strata)]
)

步骤2:绘制阶梯状生存曲线

KM曲线为阶梯形态,使用geom_step实现,注意设置direction = "hv"参数,保证先水平延伸到事件发生时间点再垂直下降,符合KM曲线的统计定义:

ggplot(km_plot_data, aes(x = time, y = surv)) +
  # 绘制生存曲线,可自定义线宽、颜色
  geom_step(direction = "hv", linewidth = 1, color = "#2c3e50") +
  # 设置坐标轴范围与标签
  scale_y_continuous(limits = c(0, 1), name = "生存率") +
  scale_x_continuous(name = "生存时间") +
  # 自定义主题,此处使用简洁的经典主题
  theme_bw()

扩展说明

  • 如果数据集包含多组分层(strata列有多个不同取值),只需在aes中添加颜色映射即可自动分组绘制多条曲线:aes(x = time, y = surv, color = factor(strata))
  • 如果需要添加删失点标记,可单独筛选n.censor > 0的行,用geom_point在对应时间点添加标记即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:42:01