我正在使用networkd3中的r软件包来生成sankey图。我已经使用以下代码来生成工作图:
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)
,其最初目标是使每个节点的颜色不同。这是变量的正确解释吗?
答案 0 :(得分:0)
您遇到的问题必须与正在使用的数据有关,但由于您尚未共享,我无法确切告诉您什么。如果我使用结构正确的数据并将其用作输入,则第一个精确的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
参数被描述为“字符串,用于指定节点中的节点组。用于为网络中的节点着色。”如果您将NodeGroup
指定为c(0,1,2,3,4,5,6,7)
,则不是字符串。这可能是为什么使用第二个sankeyNetwork()
命令使所有节点均为黑色的原因。例如,有关使用sankeyNetwork
为组着色的信息,请参见this question。
此外,在“用法”部分的帮助文件顶部,您可以看到NodeGroup
的默认值是传递给NodeID
的值。因此,如果您没有像第一个示例中那样为NodeGroup
分配任何内容,那么NodeID
将被用作组...有效地为每个节点创建一个唯一的组,并为每个节点分配一个颜色根据colourScale
参数。
帮助文件中没有明确说明的一件事是,似乎仅使用了组名的第一个单词,因此在上图中,例如,“机油进口”,“机油储备”和“油”节点都被视为同一组的一部分,因此具有相同的颜色。