You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggsurvplot与arrange_ggsurvplots给多幅KM曲线加标签报错求助

问题原因及解决方法

错误根源

  1. 列表创建方式错误:使用as.list(c(km.ecog0, km.ecog1, km.ecog2))会把每个ggsurvplot对象拆解成零散组件,导致km.plot.list里不是3个完整的KM图对象,后续调用$plot时无法识别正确的ggplot对象,触发non-numeric argument to binary operator错误。
  2. 标签赋值对象错误:原代码三次都修改了列表第一个元素,没有对应三个子图分别赋值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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:05:14