将(浮动)坐标添加到 Networkx 中的图形节点 - IndexError

Adding (float) coordinates to graph nodes in Networkx - IndexError

我有一个 .txt 形式的数据集,我想将其绘制成图表。此txt提供数据如下:

68  57
65  86
67  83
105 156

等等,所以它是一个边缘列表。

import networkx as nx
import numpy as py
import copy
import matplotlib.pyplot as plt

network0=nx.read_edgelist(r'C:\Users\alexl\Documents\new_python\init_edgelist.txt',create_using=nx.DiGraph)

nx.draw(network0)
plt.show()

在这些之后,我可以看到绘制的有向图,正如我所想的那样,它的拓扑结构错误。节点和边已正确连接,但没有位置信息。 我尝试在此导入另一个包含 3 列(节点 x y)的 .txt,例如:

2   478909.145  4204244.629

有了这个:

coordinates=py.loadtxt(r'C:\Users\alexl\Documents\new_python\nodes_coordinates.txt')
pos=coordinates
nx.draw(network0,pos=pos,with_labels=True)
plt.show()

但似乎没有用。 IndexError:只有整数、切片(:)、省略号(...)、numpy.newaxis(None)和整数或布尔数组是有效的索引。 <<< 这就是当我尝试 运行 时它在控制台中显示的内容。 我想这与坐标是浮动的事实有关?或者由 txt 给出的他们构成了一个列表,我们想要一本字典?之后我想向边缘添加权重 (0,1,2),但首先我想看到我的数据在拓扑方面“正确”绘制。

nx.draw 期望 pos 是一个字典,当它们的键是节点,值是位置时。

假设您想将输入读取为 numpy 数组,您可以做的是

pos = dict(zip(coordinates[:,0].astype(int), coordinates[:,1:]))
nx.draw(network0, pos=pos, with_labels=True)

否则,您可以遍历文件的行并直接构建字典。

pos = {}
with open('coords.txt') as f:
    for line in f:
        node, x, y = line.split()
        pos[node] = float(x), float(y)