桑基网络手动改色

Sankey network manual colour change

我正在尝试使用 networkD3 库构建桑基图。我有以下代码和数据:

# Plotting the Sankey network diagram
nodes = data.frame("name" = 
                     c("Mamalian", # Node 0
                       "Avian", # Node 1
                       "Critical", # Node 2
                       "Critical-maintained", # Node 3
                       "Endangerd", #Node 4
                       "Endangered-maintained", #Node 5
                       "Not at risk")) # Node 6

links = as.data.frame(matrix(c(
  0, 2, 16, # Note the values in the final column refer to the % of breeds in each risk category
  0, 3, 2.2, 
  0, 4, 17.6, 
  0, 5, 7.0,
  0, 6, 57.2,
  1, 2, 23.9, 
  1, 3, 1.3, 
  1, 4, 24.7, 
  1, 5, 13.1,
  1, 6, 37.0),
  byrow = TRUE, ncol = 3))
names(links) = c("source", "target", "value")
sankeyNetwork(Links = links, Nodes = nodes,
              Source = "source", Target = "target",
              Value = "value", NodeID = "name",
              fontSize= 12, nodeWidth = 30, iterations = 0)

我想手动更改与每个节点关联的颜色,因为它们 ddo 目前与我列出的濒危类别不符。我该怎么做?

结果如下:

使用 colourScale 参数设置自定义 JS/D3 色阶。 (我用 - 替换了您名字中的空格,因为 d3.scaleOrdinal() 不喜欢它们)。使用示例中的 data/objects....

nodes$group <- gsub(" ", "-", nodes$name)

color_scale <- 
  "d3.scaleOrdinal()
     .domain(['Mamalian', 'Avian', 'Critical', 'Critical-maintained', 
              'Endangerd', 'Endangered-maintained', 'Not-at-risk'])
     .range(['#000', '#F00', '#0F0', '#00F', '#FF0', '#F0F', '#0FF']);
  "
sankeyNetwork(Links = links, Nodes = nodes,
              Source = "source", Target = "target",
              Value = "value", NodeID = "name", 
              fontSize= 12, nodeWidth = 30, iterations = 0,
              NodeGroup = "group", colourScale = color_scale)