使用ggsurvfit绘制分面分层KM曲线的问题及相关疑问
问题解决与答疑
1. 报错原因与修复代码
报错是因为你用survfit2(Surv(time, status) ~ sex)只拟合了sex分组的生存曲线,生成的绘图数据中没有surg变量,而facet_wrap(~surg)需要这个变量划分分面,因此触发缺失变量的错误。
要实现按sex分面,每个分面内展示surg分层生存曲线,需让模型拟合surg的分层,同时保留sex变量用于分面,正确代码如下:
library(survival) library(ggsurvfit) # 正确实现需求的代码 survfit2(Surv(time, status) ~ surg, data = df_colon) %>% ggsurvfit() + add_confidence_interval() + facet_wrap(~sex, nrow = 1) # 按sex分面,每个分面内展示surg的分层曲线
2. 保持各分面颜色统一
默认情况下,只要分面内的分层变量为同一个(比如这里的surg),ggsurvfit会自动为相同水平分配一致的颜色。如果需要手动指定颜色,可使用scale_color_manual()和scale_fill_manual():
# 手动指定颜色确保分面一致 survfit2(Surv(time, status) ~ surg, data = df_colon) %>% ggsurvfit() + add_confidence_interval() + facet_wrap(~sex, nrow = 1) + scale_color_manual(values = c("0" = "#2E86AB", "1" = "#F24C3D")) + # 曲线颜色 scale_fill_manual(values = c("0" = "#2E86AB33", "1" = "#F24C3D33")) # 置信区间填充色(带透明度)
3. ggsurvfit支持多变量分面
ggsurvfit并非仅支持单变量分面,只要分面变量存在于模型拟合的数据中,就可以使用多变量分面,比如facet_grid()或facet_wrap()结合多个变量:
# 多变量交叉分面示例:行是sex,列是surg survfit2(Surv(time, status) ~ 1, data = df_colon) %>% ggsurvfit() + add_confidence_interval() + facet_grid(sex ~ surg)
内容的提问来源于stack exchange,提问作者ebay
相关产品推荐
相关产品推荐

