我已经尝试使用 R 中的 networkD3 包绘制网络已有一周了。 simpleNetwork
函数正常工作,但它不允许对图形的外观进行太多控制。 forceNetwork
函数就是为了这个目的:显示具有丰富视觉特征的图形。
我遇到的问题与 this 中暴露的问题几乎相同问题。我仔细阅读了包文档,并尝试了上述线程中提出的解决方案,但没有成功:我得到的只是一团节点云,没有边缘连接它们。
这是我的data.frame
:
边缘
Gene1 Gene2 Prob
1 22 3
2 22 6
3 22 6
4 22 9
5 22 3
6 22 4
7 22 8
8 22 4
9 22 6
10 22 8
11 22 6
12 22 10
13 22 6
14 22 3
15 22 6
16 22 6
17 22 0
18 22 4
19 22 6
20 22 4
垂直
Symbol Chr Expr
1 21 9
2 17 10
3 17 0
4 20 0
5 6 9
6 5 11
7 12 0
8 1 20
9 17 11
10 17 7
11 17 11
12 10 0
13 17 0
14 7 7
15 17 6
16 17 0
17 2 5
18 5 10
19 17 10
20 17 9
21 12 4
22 3 2
嗯,这会导致上面提到的没有边缘的节点云。如果我用我放在节点上的实际标签更改“符号”列,也会发生同样的事情(尊重链接表的顺序,按照包的要求)。
请注意,该包通过 this 说明了此函数的用法例如,如果您打开使用的数据集(MisLinks、MisNodes),它们的内容与我的相同,除了节点的标签之外。运行同一个例子是有效的;使用我的数据运行则不会。
这是我用来绘制网络的函数:
forceNetwork( Links = edg, Nodes = vert, Source = "Gene1", Target = "Gene2",
Value = "Prob", NodeID = "Symbol", Group = "Chr", opacity = 0.7,
colourScale = "d3.scale.category20b()", Nodesize = "Expr", zoom = T,
legend = T )
所有其他属性都正确显示(节点大小、图例、颜色),但我始终看不到边缘。我的数据集中一定有错误,但我无法以任何方式找到它。
最佳答案
我遇到了同样的问题(simpleNetwork
正常工作,forceNetwork
首先仅显示节点,没有边,然后根本不显示)。
问题(您可能在“重建从 0 开始编号的数据帧”时修复了该问题)是您的原始链接数据 edg,从 1 而不是 0 开始?
networkD3 文档,http://christophergandrud.github.io/networkD3/ ,有这样的注释:
Note: You are probably used to R’s 1-based numbering (i.e. counting in R starts from 1). However, networkD3 plots are created using JavaScript, which is 0-based. So, your data links will need to start from 0.
回复。不正确的数据类型,我最初也认为可能是问题所在,我测试了转换所有不同的列(NodeID 的因子变量除外)as.numeric
与 as.integer
- 不过,现在将我的数据更正为基于 0 的数据而不是基于 1 的数据后,我的 forceNetwork
显示可以正常使用任一数据类型。
希望这有帮助!
关于r - R 中的forceNetwork 让人疯狂 : no edges displayed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31194888/