【发布时间】:2015-07-02 21:23:40
【问题描述】:
一周以来,我一直在尝试使用 R 中的 networkD3 包绘制网络。 simpleNetwork 函数正常工作,但它不允许对图形的外观进行太多控制。 forceNetwork 函数用于此目的:显示具有丰富视觉特征的图形。
我遇到的问题与this 问题中的问题几乎相同。我仔细阅读了包文档,并尝试了上述线程中提出的解决方案,但没有运气:我得到的只是一堆节点,没有连接它们的边缘。
这里是我的data.frames:
边缘
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 )
所有其他属性都正确显示(节点大小、图例、颜色),但我一直看不到边缘。我的数据集中一定有错误,我无论如何都找不到。
【问题讨论】:
-
试试
forceNetwork( Links = transform(edg, Gene1 = Gene1-1, Gene2 = Gene2 - 1), Nodes = transform(vert, Symbol = Symbol -1), Source = "Gene1", Target = "Gene2", Value = "Prob", NodeID = "Symbol", Group = "Chr", opacity = 0.7, colourScale = "d3.scale.category20b()", Nodesize = "Expr", zoom = T, legend = T ),它使顶点ID以0而不是1开头。 -
不!没有任何变化,边缘不显示。我重建了数据帧,命名为 NodeIds 0:21 和相应的边缘。没有什么变化。还尝试在“符号”列中使用标签而不是数字:仍然只显示节点。最终尝试将列名更改为包示例中使用的列名(我知道这很傻):仍然只有节点。
-
奇怪。上面的代码产生imgur.com/73b0eiJ。我使用 networkD3 v0.1.7。
-
嗯。奇怪的!最终得到与上述测试集相同的结果。然后我将相同的技术(实际上重建的数据帧从 0 开始编号)应用于更具体的测试用例,具有 160 个节点和 170 个边。新的数据集实际上是包含多列的完整表,我只是指定了源、目标和 NodeId(这次是完整标签)。早期的尝试导致了一个空白的查看器面板。然后我可以得到我期望的情节。没有改变任何东西。这个功能的背后是什么?非常感谢@lukeA
-
可能是一个错误?不能说,因为我无法重现您的错误。
标签: r plot htmlwidgets networkd3