使用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
相关产品推荐
相关产品推荐

