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

如何修复networkD3中sankeyNetwork桑基图的节点颜色错误问题

问题修复方案

你遇到的节点同色问题由两个核心错误导致:

  • 你定义的d3颜色比例尺domain参数中,遗漏了数据实际包含的节点 ODS 8: Trabajo decente y crecimiento económico,色阶无法匹配所有节点时就会出现异常同色
  • 你设置的domain节点总数为10个,但range提供了11个颜色值,映射关系数量不匹配也会触发渲染异常

以下是修复后的完整可运行代码:

library(networkD3)
library(magrittr)
data_long <-data.frame(
  stringsAsFactors = FALSE,
  source = c("Objetivo 1",
             "Objetivo 1","Objetivo 2","Objetivo 3",
             "Objetivo 4","Objetivo 1","Objetivo 2",
             "Objetivo 3","Objetivo 4",
             "Objetivo 1","Objetivo 2","Objetivo 3",
             "Objetivo 4","Objetivo 1",
             "Objetivo 2","Objetivo 3","Objetivo 4",
             "Objetivo 1","Objetivo 4",
             "Objetivo 4"),
  target = c("ODS 12: Producción y consumo responsables",
             "ODS 17: Alianzas para lograr los objetivos",
             "ODS 10: Reducción de las desigualdades",
             "ODS 10: Reducción de las desigualdades",
             "ODS 17: Alianzas para lograr los objetivos","ODS 3: Salud y bienestar",
             "ODS 12: Producción y consumo responsables",
             "ODS 12: Producción y consumo responsables",
             "ODS 9: Industria, innovación e infraestructura",
             "ODS 8: Trabajo decente y crecimiento económico",
             "ODS 8: Trabajo decente y crecimiento económico",
             "ODS 8: Trabajo decente y crecimiento económico",
             "ODS 8: Trabajo decente y crecimiento económico",
             "ODS 9: Industria, innovación e infraestructura",
             "ODS 9: Industria, innovación e infraestructura",
             "ODS 9: Industria, innovación e infraestructura",
             "ODS 9: Industria, innovación e infraestructura",
             "ODS 5: Igualdad de género",
             "ODS 10: Reducción de las desigualdades",
             "ODS 12: Producción y consumo responsables"),
  value = c(2L,1L,3L,1L,2L,1L,
            3L,1L,1L,19L,1L,11L,13L,15L,
            8L,4L,4L,1L,1L,1L)
)

# 修正颜色比例尺:补全遗漏的ODS8节点,调整颜色数量和节点数一一对应
my_color <- 'd3.scaleOrdinal() 
.domain(["Objetivo 1", "Objetivo 2","Objetivo 3", "Objetivo 4",
"ODS 3: Salud y bienestar", "ODS 5: Igualdad de género", 
"ODS 8: Trabajo decente y crecimiento económico",
"ODS 9: Industria, innovación e infraestructura", 
"ODS 10: Reducción de las desigualdades", 
"ODS 12: Producción y consumo responsables", 
"ODS 17: Alianzas para lograr los objetivos"]) 
.range(["#12A09A", "#1E5C4F" , "#941B80", "#F19100", "#4C9F38", 
"#FF3A21", "#2E7D32", "#FD6925", "#DD1367", "#BF8B2E", "purple"])'

nodes <- data.frame(name=c(as.character(data_long$source), as.character(data_long$target)) %>% unique())

data_long$IDsource=match(data_long$source, nodes$name)-1 
data_long$IDtarget=match(data_long$target, nodes$name)-1

sankeyNetwork(Links = data_long, Nodes = nodes,
              Source = "IDsource", Target = "IDtarget",
              Value = "value", NodeID = "name", 
              sinksRight=FALSE, colourScale=my_color, 
              nodeWidth=40, fontSize=13, nodePadding=20)

上述代码中新增的ODS8节点对应颜色为#2E7D32,你可以根据需求自行调整该色值,只要保证domain里的节点名称和数据中的完全一致、domain和range的元素数量一一对应即可正常渲染自定义节点颜色。

内容的提问来源于stack exchange,提问作者Jorge Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:45:01