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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:37:06