在sankey图中为节点之间的链接涂上颜色:networkD3

时间:2019-02-17 17:10:44

标签: r sankey-diagram networkd3

我正在寻找帮助为sankey图中的节点之间的链接着色的颜色。我正在R中使用networkD3包来创建绘图。这是我想要实现的一个非常简单的示例:

library(networkD3)    
nodes <- c("a", "b", "c")
source <- c(0, 0)
target <- c(1, 2)
value <- c(5, 5)
cbind(source, target, value) -> links
as.data.frame(links) -> links
as.data.frame(nodes) -> nodes
sankeyNetwork(Links=links, Nodes=nodes, Source="source", 
              Target="target", Value="value")

上面的代码创建了一个简单的sankey图,该图具有从"b"到2个节点"c""a"的链接。我想做的只是为每个链接(而不是节点)涂上不同的颜色。例如,a-> b将为绿色,而a-> c将为黄色。我尝试遵循其他使用d3.scaleOrdinal()操作色标的示例,但是我没有任何运气。该图要么不渲染,要么始终保持灰色。

1 个答案:

答案 0 :(得分:1)

library(networkD3)    
nodes<-c("a","b","c")
source<-c(0,0)
target<-c(1,2)
value<-c(5,5)
cbind(source,target,value)->links
as.data.frame(links)->links
as.data.frame(nodes)->nodes

links$group <- "blue"
my_color <- 'd3.scaleOrdinal() .domain(["blue"]) .range(["blue"])'

sankeyNetwork(Links = links,Nodes = nodes,Source = "source",Target = 
                "target",Value = "value",  colourScale=my_color, LinkGroup="group")

您需要在链接中创建一个新列,使用d3.scaleOrdinal为每个要命名的颜色和地图命名每个颜色。最后,将那些传递给sankeyNetwork。 上面的示例会将所有链接绘制为蓝色

library(networkD3)    
nodes<-c("a","b","c")
source<-c(0,0)
target<-c(1,2)
value<-c(5,5)
cbind(source,target,value)->links
as.data.frame(links)->links
as.data.frame(nodes)->nodes


links$group[1] <- "blue"
links$group[2] <- "green"
my_color <- 'd3.scaleOrdinal() .domain(["blue", "green"]) .range(["blue", "green"])'

sankeyNetwork(Links = links,Nodes = nodes,Source = "source",Target = 
                "target",Value = "value",  colourScale=my_color, LinkGroup="group")

这将是蓝色和绿色

在此处查看更多信息:https://www.r-graph-gallery.com/322-custom-colours-in-sankey-diagram/