【发布时间】:2020-10-18 14:58:55
【问题描述】:
我希望能够看到两个(或更多)节点之间的关系。
假设我有这两条路径: 1-2-4-5-7-8 1-3-4-6-7-8
由此我们可以看到节点 2 和 5 “链接在一起”,节点 3 和 6 也是如此。
但如果我只是将这些路径添加到图表中,我最终会得到类似的结果:
G = nx.DiGraph()
nx.add_path(G, [1,2,4,5,7,8])
nx.add_path(G, [1,3,4,6,7,8])
nx.draw(G, with_labels=True)
plt.show()
但它没有显示 2&5 和 3&6 之间的关系,而且似乎我可以拥有 2&6 和 3&5 的组合,即使它们在我的初始路径中不存在。
还有什么可以显示的吗?
我正在编写这个 python 并使用库 networkx 来构建图形和 pygraphviz 以进行可视化/渲染。
【问题讨论】:
-
您的路径都不包括从 2 到 5 或从 3 到 6 的弧;这两个遍历都跨过中间节点。你希望这幅画展示什么?如果您希望看到从 2 到 5 的弧线,为什么不从 1 到 4 以及所有其他弧?
-
也许 OP 的意思是两条链是相同的,但一条链使用“2”和“5”,而另一条链在同一个地方使用“3”和“5”。但是OP应该让它更清楚一点。 OP 还应该添加生成的点文件。也许像这样的表示:
digraph G { 1 -> 2 -> 4 -> 5 -> 7 -> 8; 1 -> 3 -> 4 -> 6 -> 7 -> 8 }更符合预期。 -
我理解所显示内容背后的逻辑,但我的意思是,根据我拥有的数据,如果我走 1->2 的路径,那么以下总是 2->4-> 5->7->8。而且我从来没有遇到过1->2->4->6->7->8这样的路径。基本上 2->4->5 和 3->4->6 应该是树的分离部分。
-
但是,iiuc,这是不可能的。每个节点名称必须是唯一的。因此,如果 1 具有 2 的边缘,2 具有 4 的边缘,则 1 和 4 通过节点 2 连接。所以你可能不得不重命名不同分支中的节点@florian
-
@yatu 我想唯一的解决方案是将节点重命名为两个节点的融合,以便路径看起来像 (1,2)->(2,4)->(4,5 )->(5,7)->(7,8)。这样节点(2-> 4)永远不会导致节点(4,6)。这并不理想,但我想我可以使用它。谢谢
标签: python networkx graph-theory graphviz pygraphviz