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

如何在R的sankeyNetwork中按来源匹配流入流出的颜色与顺序?

R中sankeyNetwork桑基图按来源拆分流入流出并保持组内颜色一致的实现问题

我需要在R的sankeyNetwork桑基图中,按来源重新排列流入和流出。比如局部OP组的2年幸存者中,部分继续存活至第3年,其余被截尾——我不想把所有截尾案例归为一组,而是按来源拆分流入:来自不同初始分组的流入要分别对应到后续的存活和截尾节点,且各初始分组对应的颜色(红、黄、绿这类)在整个流向中保持一致。

以下是我的数据和R代码:

library(networkD3)

# 定义节点数据
nodes2 <- data.frame( 
  No = 0:16, 
  label = c( "Localized OP", "Localized CRT", "Localized NoTX", "Regional OP", "Regional CRT", "Regional NoTX", "Distant OP", "Distant CRT", "Distant NoTX", "Survived 2 yr", "Censored 2 yr", "Survived 3 yr", "Censored 3 yr", "Survived 4 yr", "Censored 4 yr", "Survived 5 yr", "Censored 5 yr" ) 
) 

# 定义链接数据
links2 <- data.frame( 
  Source = c( 0, 0, 9, 9, 11, 11, 13, 13, 1, 1, 9, 9, 11, 11, 13, 13, 2, 2, 9, 9, 11, 11, 13, 13, 3, 3, 9, 9, 11, 11, 13, 13, 4, 4, 9, 9, 11, 11, 13, 13, 5, 5, 9, 9, 11, 11, 13, 13, 6, 6, 9, 9, 11, 11, 13, 13, 7, 7, 9, 9, 11, 11, 13, 13, 8, 8, 9, 9, 11, 11, 13, 13 ), 
  Target = c( 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16 ), 
  Value = c( 4686, 340, 4069, 617, 3599, 470, 3134, 465, 43, 56, 21, 22, 15, 6, 12, 3, 487, 495, 340, 147, 263, 77, 208, 55, 6147, 1431, 4506, 1641, 3479, 1027, 2821, 658, 336, 658, 99, 237, 46, 53, 34, 12, 571, 2277, 288, 283, 207, 81, 158, 49, 831, 971, 367, 464, 201, 166, 130, 71, 917, 2940, 201, 716, 85, 116, 51, 34, 466, 4993, 164, 302, 119, 45, 95, 24 ) 
) 

links2$group <- as.factor(c(rep("A", 24), rep("B", 24), rep("C", 24))) 
nodes2$group <- as.factor(c(rep("A",3), rep("B", 3), rep("C", 3), "b", "c","b", "c","b", "c","b", "c" ) ) 

my_color <- 'd3.scaleOrdinal() .domain(["A", "B", "C", "b", "c"]) .range(["#941e34", "#e5b560", "#455f54", "#dfdfdd", "#504e49"])' 

sankeyNetwork(
  Links = links2, 
  Nodes = nodes2, 
  Source = "Source", 
  Target = "Target", 
  Value = "Value", 
  NodeID = "label", 
  sinksRight=FALSE, 
  nodeWidth=40, 
  fontSize=13, 
  nodePadding=20, 
  LinkGroup = "group", 
  colourScale=my_color, 
  iterations = 0)

当前生成的桑基图中,同一年份的存活/截尾节点的流入是混合排布的,无法区分其来自哪个初始分组;而我需要的效果是:每个初始分组的流向会独立拆分到后续的存活和截尾节点,对应分组的颜色在整个流向中保持统一。我在Sankematic工具中能实现这个效果,但无法在R的sankeyNetwork中复现,请问该如何调整代码?


内容的提问来源于stack exchange,提问作者MEE JOO KANG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:04:55