使用NetworkD3修改Sankey中的链接和节点颜色

问题描述

我想更改Sankey中节点和链接的颜色。不幸的是,d3.scale.Ordinal()函数对我不起作用。 你有什么主意吗? 从概念上讲,左侧的节点应该与离开它们的链接具有相同的颜色。

如果您有任何想法,我会很高兴。 Sankey无需着色即可工作。 塞西

代码如下:

links2 <- data.frame(source=c(0,1,2,3,4,5,5),target=c(6,7,8,9,6,9),value=c(3,13,12,43,19))

nodes2 <-data.frame(name=c("Cow","Ice","Emu","Coala","Uhu","Panda","Pink","Cyan","Grey","Green"))          

links2$group <- as.factor(c("type_a","type_b","type_c","type_d","type_e","type_f"))

nodes2$group <- as.factor(c("a","b","c","d","e","f","g","h","i","j"))

my_colour <- 'd3.scale.Ordinal().domain(["type_a","type_f","a","j"]),.range(["darkblue","gray45","khaki4","skyblue1","darkgoldenrod4","gray27","darkblue","darkgreen","forestgreen","yellowgreen","peru"])'

Network2 <- sankeyNetwork(Links=links2,Nodes=nodes2,Source = "source",Target = "target",Value = "value",NodeID = "name",sinksRight=FALSE,fontSize= 20,iterations=0,colourScale = my_colour,LinkGroup="group",NodeGroup="group")
```

解决方法

您要传递给sankeyNetwork的JavaScript字符串中有三个错误。

  1. networkD3使用D3v4,而不是D3v3 ... d3.scale.Ordinal的名称来自D3v3,而D3v4的等效名称为d3.scaleOrdinal

  2. 此位]),.range([应该为]).range([

  3. 您需要使用HTML color names而不是CSS3名称