2

感谢您的任何帮助,您可以提供。

我正在使用networkd3R来绘制forceNetwork节点列表和链接(edgelist)的图。

我有一个边缘列表/链接列表:

> edgelist

      round_prob NODEAid NODEBid
33979     0.6245    6990    6588
4899      0.9797    1042    1041
37109     0.6046    7498    7531
27771     0.7144    5906   16029
3603      0.6452     783     804
28491     0.6078    6034    5862
4518      0.6245     962    9874
19613     0.6745    4121   10285
19916     0.8721    4179    4180
8249      0.6821    1737    1733
35389     0.7150    7145   16992
32010     0.6495    6728   16921
22553     0.6959    4722    4549
14996     0.6031    3273   12929
35927     0.6245    7221    9814
15349     0.6245    3337    3233
34833     0.6109    7085    6852
39044     0.6117    7936    7977
39075     0.6844    7944   10978
11691     0.6821    2572    2587

这是一个更大的边缘列表的样本,其中我只选择了链接概率 >0.6 和 <1 的链接。在采样之前,完整的边缘列表是零索引的。

我还有一个节点列表,它有 18000 行长。它的一个样本是这样的:

> head(nodes)

  node id gr
0 1097  0  1
1 1149  1  1
2 1150  2  1
3 3395  3  1
4 3396  4  1
5 3523  5  1

我尝试使用forceNetwork

forceNetwork(Links = edgelist, Nodes = nodes, Source = "NODEAid",
             Target = "NODEBid", Value = "round_prob", NodeID = "node",
             Group = "gr", opacity = 0.9)

在放大之前,这给出了这个图:

在此处输入图像描述

问题:我只有 20 对节点,但我的情节还有数千个(我无法返回数字)。

通过将鼠标悬停在未连接的点上,我能够确定它们是由节点列表中所有可能的节点组成的。

基本上我认为这forceNetwork是在绘制每个可能的节点,即使是那些不在边缘列表中的节点。

为什么会发生这种情况,我该如何阻止它这样做?


根据这个问题Going crazy with forceNetwork in R: no edges shown我确保我的所有数据都是数字格式并且索引为零。我仍然收到此错误。

注意:如果我在这个问题中运行 forceNetwork 示例如何使用 networkD3 在 R 中绘制有向图?并且从本教程https://christophergandrud.github.io/networkD3/输出符合预期。

4

2 回答 2

2

我认为您应该对节点列表进行子集化,使其仅包含边缘列表中的节点。

于 2017-05-12T14:34:35.520 回答
2

我建议要么使用simpleNetwork,它会根据您传递的边缘列表自动创建节点列表,或者使用与simpleNetwork创建节点列表类似的代码,然后将其传递给forceNetwork...

edgelist <- read.table(header = T, text = "
round_prob NODEAid NODEBid
33979     0.6245    6990    6588
4899      0.9797    1042    1041
37109     0.6046    7498    7531
27771     0.7144    5906   16029
3603      0.6452     783     804
28491     0.6078    6034    5862
4518      0.6245     962    9874
19613     0.6745    4121   10285
19916     0.8721    4179    4180
8249      0.6821    1737    1733
35389     0.7150    7145   16992
32010     0.6495    6728   16921
22553     0.6959    4722    4549
14996     0.6031    3273   12929
35927     0.6245    7221    9814
15349     0.6245    3337    3233
34833     0.6109    7085    6852
39044     0.6117    7936    7977
39075     0.6844    7944   10978
11691     0.6821    2572    2587
")

library(networkD3)

simpleNetwork(edgelist, Source = 'NODEAid', Target = 'NODEBid')

sources <- edgelist$NODEAid
targets <- edgelist$NODEBid
node_names <- factor(sort(unique(c(as.character(sources), 
                                   as.character(targets)))))
nodes <- data.frame(name = node_names, group = 1, size = 8)
links <- data.frame(source = match(sources, node_names) - 1, 
                target = match(targets, node_names) - 1, 
                value = edgelist$round_prob)

forceNetwork(Links = links, Nodes = nodes, Source = "source",
             Target = "target", Value = "value", NodeID = "name",
             Group = "group", opacity = 0.9)
于 2017-05-12T15:39:55.647 回答