gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:01:55 24 4
gpt4 key购买 nike

我有以下距离矩阵:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com