使用ggsurvplot与arrange_ggsurvplots给多幅KM曲线加标签报错求助
问题原因及解决方法
错误根源
- 列表创建方式错误:使用
as.list(c(km.ecog0, km.ecog1, km.ecog2))会把每个ggsurvplot对象拆解成零散组件,导致km.plot.list里不是3个完整的KM图对象,后续调用$plot时无法识别正确的ggplot对象,触发non-numeric argument to binary operator错误。 - 标签赋值对象错误:原代码三次都修改了列表第一个元素,没有对应三个子图分别赋值A、B、C标签。
修正后的代码
library('survminer'); require('survival'); # 拆分数据集 lung.ecog0 <- lung[lung$ph.ecog == 0, ]; lung.ecog1 <- lung[lung$ph.ecog == 1, ]; lung.ecog2 <- lung[lung$ph.ecog == 2, ]; # 拟合KM模型 fit.ecog0 <- survfit(Surv(time, status) ~ sex, data = lung.ecog0); fit.ecog1 <- survfit(Surv(time, status) ~ sex, data = lung.ecog1); fit.ecog2 <- survfit(Surv(time, status) ~ sex, data = lung.ecog2); # 生成KM图对象 km.ecog0 <- ggsurvplot(fit.ecog0); km.ecog1 <- ggsurvplot(fit.ecog1); km.ecog2 <- ggsurvplot(fit.ecog2); # 正确创建包含完整KM图对象的列表 km.plot.list <- list(km.ecog0, km.ecog1, km.ecog2); # 分别为三个子图添加标签 km.plot.list[[1]]$plot <- km.plot.list[[1]]$plot + labs(tag = 'A'); km.plot.list[[2]]$plot <- km.plot.list[[2]]$plot + labs(tag = 'B'); km.plot.list[[3]]$plot <- km.plot.list[[3]]$plot + labs(tag = 'C'); # 排列并展示图形 arrange_ggsurvplots(km.plot.list, print = TRUE, ncol = 3, nrow = 1);
批量添加标签的优化写法(可选)
如果子图数量较多,用循环可以避免重复代码:
# 定义标签向量 tags <- c('A', 'B', 'C') # 循环为每个子图添加标签 for(i in 1:length(km.plot.list)){ km.plot.list[[i]]$plot <- km.plot.list[[i]]$plot + labs(tag = tags[i]) }
内容的提问来源于stack exchange,提问作者mepstein1218
相关产品推荐
相关产品推荐

