R: networkD3 桑基图 - 颜色不显示

R: networkD3 sankey plot - colours not displaying

我正在使用 package in 生成桑基图。我使用以下代码生成了一个工作图:

sankeyNetwork(Links = df_links, Nodes = df_nodes, Source = "source", 
              Target = "target", Value = "value", NodeID = "name", 
              units = "Cases", fontSize = 12, nodeWidth = 20)

但是,所有节点都是蓝色的,我认为包的默认输出是分别为每个节点着色。

当我尝试添加一个 NodeGroup 函数时,文档说它应该允许显示颜色,所有节点标签都消失了,所有节点现在都变成了黑色。

sankeyNetwork(Links = df_links, Nodes = df_nodes, Source = "source", 
              Target = "target", Value = "value", NodeID = "name", 
              NodeGroup = "ID", units = "Cases", fontSize = 12, 
              nodeWidth = 20)

如果有人能让我知道哪里出错了,我们将不胜感激。我怀疑我误解了 NodeGroup 变量的用法 - 我目前正在为七个 NodeID 中的每一个分配一个唯一的组 c(0,1,2,3,4,5,6,7),最初的目的是让每个节点的颜色不同。这是对变量的正确解释吗?

你遇到的问题一定是你正在使用的数据,但我不能告诉你具体是什么,因为你没有分享它。如果我使用正确结构化的数据并将其用作输入,您的第一个准确的 sankeyNetwork() 命令将按预期工作(带有颜色)...

(有关 NodeGroup 参数的讨论,请参阅下文)

library(networkD3)

URL <- paste0('https://cdn.rawgit.com/christophergandrud/networkD3/',
              'master/JSONdata/energy.json')
energy <- jsonlite::fromJSON(URL)

df_links <- energy$links
df_nodes <- energy$nodes

sankeyNetwork(Links = df_links, Nodes = df_nodes, Source = "source", 
              Target = "target", Value = "value", NodeID = "name", 
              units = "Cases", fontSize = 12, nodeWidth = 20)

如果您查看帮助文件,NodeGroup 参数描述为 "character string specifying the node groups in the Nodes. Used to color the nodes in the network." 如果您将 NodeGroup 指定为 c(0,1,2,3,4,5,6,7),那不是字符串。这可能就是为什么使用第二个 sankeyNetwork() 命令时所有节点都是黑色的原因。例如,参见 this question 关于使用 sankeyNetwork.

着色组

此外,在帮助文件顶部的 "Usage" 部分,您可以看到 NodeGroup 的默认值是传递给 NodeID 的值。因此,如果您没有像第一个示例那样为 NodeGroup 分配任何内容,那么 NodeID 将用作组...有效地为每个节点创建一个唯一的组,该组将被分配一个颜色根据 colourScale 参数。

帮助文件中没有明确说明的一件事是似乎只使用了组名的第一个单词,因此在上图中,例如 "Oil imports"、"Oil reserves", 和 "Oil" 节点都被认为是同一组的一部分,因此具有相同的颜色。