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

如何在R语言Sankey桑基图中按分组为连接线条设置不同颜色

你需要在sankeyNetwork()函数中添加LinkGroup参数指定分组字段,同时配置colourScale参数定义不同分组对应的颜色,修改后的完整代码如下:

# 加载依赖包
library(tidyverse)
library(viridis)
library(patchwork)
library(hrbrthemes)
library(circlize)
library(networkD3)

# 加载数据集
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/13_AdjacencyDirectedWeighted.csv", header=TRUE)

# 转换为长格式
data_long <- data %>%
  rownames_to_column %>%
  gather(key = 'key', value = 'value', -rowname) %>%
  filter(value > 0)
colnames(data_long) <- c("source", "target", "value")
data_long$target <- paste(data_long$target, " ", sep="")
data_long$group <- c(rep("A", 10), rep("B",7), rep("C", 8), rep("D", 10))

# 构造节点数据框
nodes <- data.frame(name=c(as.character(data_long$source), as.character(data_long$target)) %>% unique())

# 转换为networkD3要求的索引格式
data_long$IDsource=match(data_long$source, nodes$name)-1 
data_long$IDtarget=match(data_long$target, nodes$name)-1

# 定义颜色映射规则:domain对应分组名,range对应分组的颜色值,可自行修改
colour_scale <- 'd3.scaleOrdinal()
            .domain(["A", "B", "C", "D"])
            .range(["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4"])'

# 绘制桑基图,新增LinkGroup和colourScale参数
sankeyNetwork(Links = data_long, Nodes = nodes,
              Source = "IDsource", Target = "IDtarget",
              Value = "value", NodeID = "name", 
              LinkGroup = "group",
              colourScale = colour_scale,
              sinksRight=FALSE, nodeWidth=40, fontSize=13, nodePadding=20)
  • LinkGroup = "group" 表示连线按照数据框中的group列分组匹配颜色
  • colour_scale中domain的取值要和数据里的分组名称完全对应,range里的颜色代码可根据需求自行替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:54:02