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

如何调整ggsurv绘制的Kaplan-Meier生存曲线的图例显示顺序

解决方案

你的图例顺序不符合预期的核心原因是R默认将字符类型的分组变量按字母顺序自动排序,只需主动指定分组的排序规则即可解决,优先推荐第一种方案:


方案1:修改原始数据的分组因子顺序(最稳妥,从根源适配所有后续分析)

在调用survfit函数之前,先将fat数据框中的Treatments列转换为自定义顺序的因子:

# 自定义Treatments的排序规则
fat$Treatments <- factor(fat$Treatments, 
                         levels = c("100Low", "30Low", "15Low", "100High", "30High", "15High"))

# 后续代码和你原有的逻辑完全一致,不需要额外修改
ru <- survfit(Surv(Tf,fat==1) ~ Treatments, data = fat)

uu <- ggsurv(ru, CI = "def", plot.cens = TRUE, surv.col = c(1,1,2,2,3,3),
             cens.col = 1, lty.est = c(1,1,1,5,5,5), size.est = 1.05, cens.shape = 12, cens.size = 3,
             back.white = FALSE, xlab = "Time (seconds)", ylab = "Ratio of fish remaining", main = "Kaplan-Meier Curves")

uu1 <- uu + theme_gray(base_size=13) + theme(legend.position = "right") + theme(legend.title = element_text(face = "bold")) +
          theme(plot.title = element_text(face = "bold")) + theme(axis.title = element_text(size = 15, face = "bold")) +
  theme(axis.ticks = element_line(size = 1))  + scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
  scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) + theme(axis.text = element_text(size = 14)) +
  theme(legend.text = element_text(size = 12))

windows()
(uu1)

该方案会直接让survfit按照你指定的顺序分组,后续绘图的图例、颜色、线型映射都会自动匹配你设置的参数。


方案2:不修改原始数据,直接在ggplot图层调整图例顺序

如果你不想改动原始数据,也可以在构建uu1时新增scale_color_manual和scale_linetype_manual指定图例顺序,注意要和你原有参数的颜色、线型设置对应:

# 仅需在你原有uu1的链式操作末尾追加以下两行代码即可
uu1 <- uu + theme_gray(base_size=13) + theme(legend.position = "right") + theme(legend.title = element_text(face = "bold")) +
          theme(plot.title = element_text(face = "bold")) + theme(axis.title = element_text(size = 15, face = "bold")) +
  theme(axis.ticks = element_line(size = 1))  + scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
  scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) + theme(axis.text = element_text(size = 14)) +
  theme(legend.text = element_text(size = 12)) +
  # 新增以下两行指定图例顺序
  scale_color_manual(breaks = c("100Low", "30Low", "15Low", "100High", "30High", "15High"),
                     values = c("black", "black", "red", "red", "blue", "blue")) +
  scale_linetype_manual(breaks = c("100Low", "30Low", "15Low", "100High", "30High", "15High"),
                        values = c(1,1,1,5,5,5))

内容的提问来源于stack exchange,提问作者Muhammad Usama Ashraf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:06:03