python - 使用networkx从距离矩阵生成图: inconsistency - Python

标签 python graph networkx distance-matrix

我有以下距离矩阵:

delta =
[[ 0.          0.71370845  0.80903791  0.82955157  0.56964983  0.          0.        ]
 [ 0.71370845  0.          0.99583115  1.          0.79563006  0.71370845
   0.71370845]
 [ 0.80903791  0.99583115  0.          0.90029133  0.81180111  0.80903791
   0.80903791]
 [ 0.82955157  1.          0.90029133  0.          0.97468433  0.82955157
   0.82955157]
 [ 0.56964983  0.79563006  0.81180111  0.97468433  0.          0.56964983
   0.56964983]
 [ 0.          0.71370845  0.80903791  0.82955157  0.56964983  0.          0.        ]
 [ 0.          0.71370845  0.80903791  0.82955157  0.56964983  0.          0.        ]]

我正在尝试使用 networkx 库将其表示为图表。 这是我的代码:

import networkx as nx

G = nx.from_numpy_matrix(delta) 
pos = nx.random_layout(G) 

plt.figure(figsize=(7, 7))
for k, p in pos.iteritems():
    plt.scatter(p[0], p[1], marker='o', c=colors[k], s=50, edgecolor='None')
lgd = plt.legend(markers, labels, numpoints=1, bbox_to_anchor=(1.17, 0.5))
plt.tight_layout()
plt.axis('equal')
pt.show()

然而,我所看到的并不是我所期望的。例如,考虑以下输出:

enter image description here

delta 来看,节点 1 与节点 6 和 7 位于同一点,并且距离节点 4 较远。我在输出图中没有看到 。此外,我超时运行它,它会产生另一个输出。这是预料之中的,但距离似乎没有得到尊重。例如,在下图中,1 到 6,7 和 4 之间的距离发生了变化。

enter image description here

我不明白为什么。

最佳答案

您可以使用稍微一致的布局,也许是shell_layout() 或circular_layout()。从技术上讲,在通用抽象图中,所描绘的位置没有真正的意义,并且每次您调用这些函数作为该事实的反射(reflect)时,每个函数都会有一点差异。他们只是根据某种预定义的模式以合理的方式放置节点。

如果您想要一致的展示位置,您必须自己动手。

了解布局函数生成的结构,并利用您对数据的理解来生成更合理的可视化。这些函数生成一个以节点为键的字典,其值是长度为 2 的列表。第一个条目指定节点的 x 位置,第二个条目指定 y。
以此为例,办公室之间的网络连接图。

pos=nx.spring_layout(G)
print pos

可能会产生类似的结果

{'A': [1, 12], 'C': [5, 8], 'B': [4, 11], 'E': [8, 3], 'D': [8, 7], 'F': [6, 1]}

但是,我知道,由于我的数据代表 citites,因此在代表其物理位置的位置显示节点是有意义的,因此我构建了自己的字典(每个节点已经具有初始化属性“x”并且'y')。

pos = {}
for node in G.nodes():
    pos[node] = [G.node[node]["x"], G.node[node]["y"]]

这每次都会以相同的方式显示节点。根据您的矩阵以类似的方式创建您自己的 pos 字典。

关于python - 使用networkx从距离矩阵生成图: inconsistency - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339865/

相关文章:

Python -> 告诉一个带有 print 语句的程序到 "not print"

excel - Excel 中绘制点的平均曲线/抛物线

algorithm - 树中的中心节点

algorithm - 寻找一种算法来评估图形的节点

python - 引发异常是测试输入类型的可接受方法

python - 在没有命令行工具 (fab) 的情况下使用 Python Fabric

python - Networkx 永远不会完成 200 万个节点的介数中心性计算

python - 如何创建具有随机权重的随机 networkx 图

python - 如何使用 networkx 从给定图中提取所有可能的诱导子图

python - 验证 Pandas 数据框列