如何在R中创建医疗路径各阶段提供者颜色一致的桑基图
桑基图中同一医疗提供者节点颜色一致的实现方案
问题1:基于提供者名称分配统一颜色
核心思路是为每个唯一的医疗提供者分配专属颜色,再将颜色映射到节点数据中,同时通过NodeGroup参数确保颜色按提供者分组应用。
修改你的代码,在创建nodes数据框后添加颜色分配逻辑:
library(networkD3) library(dplyr) library(readxl) # Load data data <- read_excel("healthcare_data.xlsx", sheet = "Sheet1") # Create nodes and links providers <- unique(c(data$Phase_Provider, data$Next_Phase_Provider)) nodes <- data.frame(name = providers) # 为每个唯一提供者分配专属颜色(可选多种调色方案) # 方案1:使用R内置彩虹色板 color_palette <- rainbow(length(providers)) # 方案2:使用viridis配色(需先安装install.packages("viridis")) # library(viridis) # color_palette <- viridis(length(providers), option = "D") # 方案3:使用ggplot2的离散色板(需先安装install.packages("ggplot2")) # library(ggplot2) # color_palette <- scales::hue_pal()(length(providers)) # 将颜色匹配到对应提供者的节点 nodes$color <- color_palette[match(nodes$name, providers)] links <- data %>% mutate(source = match(Phase_Provider, nodes$name) - 1, target = match(Next_Phase_Provider, nodes$name) - 1) %>% group_by(source, target) %>% summarise(value = n()) %>% ungroup() # 生成桑基图,指定NodeGroup为name确保颜色按提供者分组 sankeyNetwork(Links = links, Nodes = nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", fontSize = 12, nodeWidth = 30, NodeGroup = "name")
关键说明:
providers是所有唯一医疗提供者的集合,确保每个提供者只对应一种颜色NodeGroup = "name"参数让sankeyNetwork根据提供者名称(即节点组)应用颜色,保证同一提供者的所有节点实例颜色一致
问题2:使用d3.scaleOrdinal()或R方法实现颜色映射
两种方式都可行,R内置方法更简便,d3方法适合自定义交互或复用前端调色逻辑:
方式1:R本地方法(推荐)
如上述代码所示,用rainbow()、viridis()或ggplot2的色板函数,直接生成与唯一提供者数量匹配的颜色向量,再映射到节点即可。
方式2:d3.scaleOrdinal()实现
通过colourScale参数传入自定义JS代码,利用d3的序数比例尺绑定提供者名称与颜色:
# 承接前面的nodes和links数据准备 sankeyNetwork(Links = links, Nodes = nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", fontSize = 12, nodeWidth = 30, NodeGroup = "name", colourScale = JS('d3.scaleOrdinal() .domain(nodes.map(function(d) { return d.name; })) .range(d3.schemeCategory10);'))
说明:
d3.schemeCategory10是d3内置的10种离散颜色,也可替换为自定义颜色数组(如["#FF5733", "#33FF57", ...])- 该方法直接在前端层面完成颜色映射,适合需要与其他d3可视化统一配色的场景
内容的提问来源于stack exchange,提问作者E. van Dongen
相关产品推荐
相关产品推荐

