在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:UsersalexlDocumentsnew_pythoninit_edgelist.txt',create_using=nx.DiGraph)
nx.draw(network0)
plt.show()

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

2   478909.145  4204244.629

这个:

coordinates=py.loadtxt(r'C:UsersalexlDocumentsnew_pythonnodes_coordinates.txt')
pos=coordinates
nx.draw(network0,pos=pos,with_labels=True)
plt.show()

但似乎不起作用。IndexError:只有整数、切片(:(、省略号(...(、numpy.newaxis(None(以及整数或布尔数组才是有效索引<lt<当我尝试运行这个时,它在控制台中显示的就是这个。我想这和坐标是浮动的有关吧??还是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)

最新更新