如何显示不同节点之间的关系

Posted

技术标签:

【中文标题】如何显示不同节点之间的关系【英文标题】:How to display relationships between different nodes 【发布时间】: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)。这并不理想,但我想我可以使用它。谢谢 【参考方案1】:

但它没有显示 2&5 和 3&6 之间的关系

我认为您可能会混淆 path 究竟是什么。通过向网络添加路径,您将路径中的所有连续节点添加为边。所以添加路径(1,2,4) 与添加边缘((1,2), (2,4)) 相同。因此,图中的节点25 通过节点序列2,4,5 连接,遵循此逻辑。

但是根据您的描述,您需要所有这些节点的组合,例如:

from itertools import combinations

G = nx.DiGraph()

l1 = [1,2,4,5,7,8]
G.add_edges_from(combinations(l1, r=2))

plt.figure(figsize=(10,6))
nx.draw(G, with_labels=True)
plt.show()

似乎我可以使用 2&6 和 3&5 的组合,即使它们在我的初始路径中不存在。

节点26,即使它们是通过不同的路径添加的,它们都是connected,这意味着节点6可以从节点2通过1访问,2,4,5,7,8 和 1,3,4,6,7,8 来自第二条路径。

【讨论】:

我知道节点 6 通过节点 4 连接到节点 2 和 3,这正是我不想要的。根据我拥有的数据,我想表示节点 5 只有在我来自节点 2 和 4 时才会出现,而节点 6 只有在我来自节点 3 和 4 时才会出现。基本上路径 2->4- >5 和 3->4->6 应该是树的平行分支。 答案对@florian 有帮助吗?不要忘记您可以投票并接受答案。见What should I do when someone answers my question?,谢谢! 我赞成(我认为?)您对我最初帖子的最后评论,但那个特定的答案并没有帮助。此处显示不存在的边(例如 1->8 或 1->5)。

以上是关于如何显示不同节点之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

如何理解配置图中节点之间的关联关系,它和类之间的关联关系有啥联系

DOM节点关系

分布式系统中节点上的进程线程纤程概念及其之间关系你懂吗?

尝试放松并在节点之间建立新的关系Neo4J C#Client

如何定义来自不同来源的表之间的关系?

如何在节点 js 中的不同路由之间共享令牌?