R语言highcharter包如何修改生存图的系列颜色?
R highcharter 生存图自定义线条颜色失效解决方案
问题现象
在R中使用highcharter包绘制生存曲线时,自定义线条颜色存在以下异常:
- 调用
hc_colors()传入自定义色值向量不生效,线条始终显示默认配色 - 通过
hc_plotOptions(series = list(lineColor = "xxx"))仅能将所有线条统一设置为同一种颜色,无法为不同分组的生存曲线设置差异化颜色
可复现代码如下:
library('survival') library('highcharter') leukemia.surv <- survfit(Surv(time, status) ~ x, data = aml) # 写法1:不生效,线条仍为默认颜色 highcharter::hchart(leukemia.surv)%>% hc_colors(c("#0073C2FF", "#EFC000FF")) # 写法2:所有线条统一变为蓝色,无法实现分系列设色 highcharter::hchart(leukemia.surv)%>% hc_plotOptions(series = list(lineColor = "blue"))
失效原因
highcharter针对survfit对象的内置绘图方法,会在生成每个数据系列时直接把默认配色硬编码到单系列的配置项中,全局配置hc_colors()、全局plotOptions的优先级低于单系列自带的配置,因此无法覆盖已写入单系列的颜色值。
可行解决方法
方法1:绘图时直接传入自定义配色参数
直接在hchart()调用时传入colors参数,从源头替换内置默认配色,同时会自动匹配对应透明度的置信区间填充色:
custom_colors <- c("#0073C2FF", "#EFC000FF") hchart(leukemia.surv, colors = custom_colors)
方法2:生成图表后批量修改单系列配置
如果已经生成了图表对象,可以遍历所有系列逐个替换颜色,注意同步修改置信区间的填充色:
custom_colors <- c("#0073C2FF", "#EFC000FF") p <- hchart(leukemia.surv) # 遍历所有系列替换颜色 for (i in seq_along(p$x$hc_opts$series)) { # 修改线条颜色 p$x$hc_opts$series[[i]]$color <- custom_colors[i] # 修改置信区间填充色,末尾加30代表约19%透明度 p$x$hc_opts$series[[i]]$fillColor <- paste0(custom_colors[i], "30") } # 输出最终图表 p
注意:不要使用全局
hc_plotOptions设置lineColor的方式给生存图设色,该配置会覆盖所有系列的线条设置,无法实现差异化配色。
内容的提问来源于stack exchange,提问作者dwmz
相关产品推荐
相关产品推荐

