在ggsurvfit中对分层的KM曲线进行分面绘制

编程语言 2026-07-11

我想用ggsurvfit绘制分面KM曲线。我可以按一个变量分面,但在每个分面内却无法获得分层。

例如,我想按变量sex进行分面,但在每个分面中得到变量surg的生存曲线。

library(survival)
library(ggsurvfit)

survfit2(Surv(time, status) ~ sex, data = df_colon) %>%
    ggsurvfit() +
    add_confidence_interval() +
    facet_wrap(~surg, nrow = 1)

但这会导致如下错误:

Error in `combine_vars()`: 
! At least one layer must contain all faceting variables: `surg` 
✖ Plot is missing `surg` 
✖ Layer 1 is missing `surg` 
✖ Layer 2 is missing `surg`

另外,还希望得到关于如何在每个分面中使用相同颜色集合的说明。

我已经查看了 ggsurvfit 的画廊,并了解到用于分面的数据框需要包含列 strata。这是否就意味着只能按一个变量进行分面?

解决方案

正如Limey's回答所示,这与 Survfit 使用的数据格式有关。

获得类似分面的图的一种方法是为每个surg分别创建单独的图,然后用 patchwork 将它们拼接在一起。

library(survival)
library(ggsurvfit)
library(patchwork)

# make a list of plots; one for each value of surg
lapply(unique(df_colon$surg), \(x){
  survfit2(Surv(time, status) ~ sex, data = subset(df_colon, surg == x)) %>%
    ggsurvfit() +
    add_confidence_interval() +
    scale_y_continuous(limits = c(.25, 1)) +
    ggtitle(x)
}) |> 
  # use patchwork to put together
  wrap_plots(guides = "collect", axes = "collect")

创建于2026-03-25,使用 reprex v2.1.1

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章