如何基于提取的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
相关产品推荐
相关产品推荐

