【问题标题】:Python networkx node spacingPython networkx节点间距
【发布时间】:2019-02-20 16:15:41
【问题描述】:

我有 1000 个不同的名称,每个名称构成一个节点。每个名称可以无限次与 0..1000 个其他名称连接。我想以这样一种方式绘制它,即两个节点之间的距离与它们连接的次数成反比。

例子:

'node1' : ['node2','node2','node2','node2','node2','node3']
'node2' : ['node1','node1','node1','node1','node1']
'node3' : ['node1']

node1和node2应该挤在一起,node3应该离得更远。

这可能吗?目前我正在使用以下代码绘制图表:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_nodes_from(grapharr.keys())
for k in grapharr:
    for j in grapharr[k]:
        G.add_edge(k,j)

nx.draw_networkx(G, **options)

grapharr是一个字典结构,其中键是节点,值是包含特定节点连接的数组。

【问题讨论】:

  • 我不认为这对所有节点都是可能的。想想这样的优化问题会有哪些限制
  • 网络是定向的还是非定向的? IE。在您的示例中是否总是像从 A 到 B 的关联数与从 B 到 A 的关联数一样?如果是这样,您可以将这些转换为边缘权重并使用力导向/弹簧布局。由于@yatu 提到的约束可能发生冲突,这并不准确,但这将是朝着正确方向迈出的一步。

标签: python networkx


【解决方案1】:

一般情况下是不可能的。看这张图:

想象中心节点彼此之间有一千个连接,但“方形”节点之间只有一个连接。你将如何绘制它们?

无论如何,您可以将连接级别设置为边缘权重,并使用力导向的布局来尝试创建最佳布局(但当然不是 100% 最佳)。在networkx中,有:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2021-01-26
    • 2017-06-26
    • 1970-01-01
    • 2020-12-21
    • 2021-04-30
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多