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

使用ggcompetingrisks绘图时如何修改线条颜色并正确设置线型映射

问题原因

survminer包的ggcompetingrisks()函数默认美学映射逻辑和需求完全相反:

  • 默认用颜色区分不同竞争风险(risk1/risk2)
  • 默认用线型区分不同分组(即设置的5个时间段)
    手动修改scale标签和值的操作没有调换底层映射关系,所以最终输出的图形对应关系错乱,辨识度差。另外原代码里第二个颜色值"619CFF"缺失开头的#,也会导致颜色赋值异常。
修正方案

直接在绘图代码里覆写默认美学映射,把颜色、线型对应的变量调换,再匹配对应数量的标度值即可,修正后的完整代码如下:

p3 <- ggcompetingrisks(fit = TimePer_fit, 
                       multiple_panels = F, 
                       ggtheme = theme_minimal(),
                       coef = 1.96, # 95%置信区间
                       conf.int = F,
                       xlim = c(0, 45),
                       ylim = c(0, 0.5),
                       xlab = "Days", 
                       ylab = "Probability",
                       title = "Cumulative Incidence by Time Period") +
  # 覆写默认映射:颜色对应时间段,线型对应风险类型
  aes(color = group, linetype = event) +
  theme(plot.title = element_text(hjust = 0.5), # 标题居中
        axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0)), # 调整Y轴标签边距
        axis.title.x = element_text(margin = margin(t = 10, r = 0, b = 0, l = 0))) + # 调整X轴标签边距
  # 颜色映射5个时间段
  scale_color_manual(labels = c("Period 1","Period 2","Period 3","Period 4", "Period 5"),  
                     values = c("#F8766D", "#7CAE00", "#00BFC4", "#619CFF", "#C77CFF"), 
                     name = element_blank()) +
  # 线型映射2个风险组
  scale_linetype_manual(labels = c("risk 1", "risk 2"),
                        values = c("solid", "dashed"),
                        name = element_blank())
说明
  • 代码里的group和event是ggcompetingrisks内部生成数据集的固定列名:group对应拟合模型时传入的分组变量(即5个时间段),event对应不同竞争风险结局,直接调用即可,不需要修改原模型拟合代码
  • 示例里的配色用了ggplot2默认离散色板的5个颜色,线型选了区分度最高的实线+虚线组合,可以根据出版需求替换成其他配色和线型,只要保证标度值的数量和对应分组数一致即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:24:43