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

如何让ggsurvplot图例文字颜色匹配线条色并保留风险表

解决ggsurvplot图例文字颜色匹配线条颜色并保留风险表的方案

核心思路

ggsurvplot是包含plot(生存曲线)和table(风险表)的列表对象,我们需要单独修改生存曲线的图例文字颜色,再将修改后的曲线与原风险表重新组合,避免破坏原对象结构。

步骤与代码示例

1. 加载依赖包并生成基础数据与模型

library(survival)
library(survminer)
library(ggplot2)
library(gridExtra)

# 生成示例生存数据
set.seed(123)
df <- data.frame(
  time = sample(1:100, 100, replace = TRUE),
  status = sample(0:1, 100, replace = TRUE),
  group = factor(sample(c("A", "B", "C"), 100, replace = TRUE))
)

# 拟合生存模型
fit <- survfit(Surv(time, status) ~ group, data = df)

# 生成带风险表的ggsurvplot对象
gg_obj <- ggsurvplot(fit, data = df, risk.table = TRUE)

2. 修改生存曲线的图例文字颜色

从原plot中提取线条颜色,动态设置图例文字颜色,避免覆盖自定义配色:

# 提取原plot的线条颜色
plot_build <- ggplot_build(gg_obj$plot)
group_colors <- plot_build$data[[1]]$colour %>% unique()

# 修改图例文字颜色
modified_plot <- gg_obj$plot +
  theme(
    legend.text = element_text(colour = group_colors)
  )

3. 重新组合生存曲线与风险表

用ggarrange保持原布局比例:

# 组合图形与风险表,调整高度比例匹配原ggsurvplot样式
final_plot <- ggarrange(modified_plot, gg_obj$table, 
                        ncol = 1, nrow = 2, 
                        heights = c(3, 1))

4. 自定义配色场景适配

如果使用了自定义调色板,方法完全兼容,无需额外修改:

# 生成带自定义配色的ggsurvplot
gg_obj_custom <- ggsurvplot(fit, data = df, risk.table = TRUE,
                            palette = c("#E41A1C", "#377EB8", "#4DAF4A"))

# 提取自定义颜色并修改图例
plot_build_custom <- ggplot_build(gg_obj_custom$plot)
group_colors_custom <- plot_build_custom$data[[1]]$colour %>% unique()

modified_plot_custom <- gg_obj_custom$plot +
  theme(
    legend.text = element_text(colour = group_colors_custom)
  )

# 组合最终图形
final_plot_custom <- ggarrange(modified_plot_custom, gg_obj_custom$table, 
                               ncol = 1, nrow = 2, heights = c(3, 1))

为什么之前的方法失效?

  • 直接替换ggsurvplot$plot会破坏对象内部关联数据,导致报错;
  • plot1 + fitgraph$table无效是因为ggplot的加法不支持直接拼接风险表的grob对象,必须用网格布局工具组合。

内容的提问来源于stack exchange,提问作者Timmo83

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:18:20