设置linetype时survminer::ggsurvplot_combine图例重复问题求助
问题:ggsurvplot_combine设置linetype后图例重复
使用survminer包的ggsurvplot_combine绘制组合生存曲线时,为区分平均曲线与分组曲线设置linetype参数(将平均曲线设为虚线),会导致图例重复显示颜色和线型两个分组;注释掉linetype参数后图例显示正常,但无法区分曲线样式。需要保留指定线型样式,同时仅显示一个颜色图例。
修复方案
核心是手动控制ggplot的图例逻辑:关闭自动生成的线型图例,同时让颜色图例关联对应的线型样式,确保图例与曲线样式一致。具体步骤:
- 先运行原代码生成基础绘图对象;
- 通过
ggplot2的guides()函数关闭线型图例; - 用
override.aes参数在颜色图例中指定每个标签对应的线型,保证图例样式与曲线匹配。
完整修复代码
require(survival) # 修正原代码中的大小写错误,应为小写survival require(survminer) require(ggplot2) set.seed(42) a <- c(32,291,545, 44,3,792,352, 20,615,169, 61,156, 88,863,255, 33,132,5, 63,8,964,831, 55,133, 12, 54,261,867, 17, 12,699,233,251,446, 43,223, 374, 75, 34, 69,120, 84,134,8,806,8, 48, 86,211, 2436, 61, 81, 87, 12, 838, 34, 17,141, 44,155,128,6, 29, 16, 16, 34,130,430,325, 41, 28, 53, 32,291,545, 44,3,792,352, 20,615,169, 61,156, 88,863,255, 33,132,5, 63,8,964,831, 55,133, 12, 54,261,867, 17, 12,699,233,251,446, 43,223, 86, 54,3,630, 93,699, 25,746,6, 46, 22, 60,395,402,151, 26, 38,125, 75, 34, 69,120, 84,134,8,806,8, 48, 86,211, 2436, 61, 191, 49, 59,6, 34, 56,2, 96, 422, 45, 70) b <- sample(c("Alpha", "Beta", "Gamma"), length(a), replace = T) c <- sample(0:1, length(a), replace = T) df <- data.frame(a, b, c) df$b <- factor(df$b, levels = c("Alpha", "Beta", "Gamma")) avg <- survfit(Surv(time = a, event = c) ~ 1, data = df) surv_b <- survfit(Surv(time = a, event = c) ~ b, data = df) surv_comb <- list(surv_b, avg) # 生成基础绘图对象 p <- survminer::ggsurvplot_combine( surv_comb, data = df, combine = TRUE, censor = FALSE, legend = "right", palette = c("orange", "steelblue", "seagreen", "black"), linetype = c(rep("solid",3), "dashed"), legend.title = element_blank(), legend.labs = c(levels(df$b), "avg") ) # 修改ggplot对象,合并图例 p$plot + guides( linetype = "none", # 关闭线型图例 color = guide_legend( override.aes = list(linetype = c(rep("solid",3), "dashed")) # 让颜色图例显示对应线型 ) )
注意事项
- 原代码中
require(Survival)为拼写错误,需改为require(survival); override.aes中的线型顺序必须与legend.labs的标签顺序完全对应,保证图例样式和曲线一致。
内容的提问来源于stack exchange,提问作者Reader 123
相关产品推荐
相关产品推荐

