在ggsurvfit中对分层的KM曲线进行分面绘制
我想用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。