向Networkx Indexer中的图形节点添加(浮点)坐标

2024-09-29 19:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.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列的.txt(节点x y),例如:

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()

但似乎不起作用。 索引器:只有整数、片(:)、省略号(...)、numpy.newaxis(None)和整数或布尔数组是有效的索引<<&书信电报;这就是我尝试运行此操作时控制台中显示的内容。 我想这是因为坐标是浮动的??或者txt给出的,他们组成一个列表,我们想要一本字典?之后,我想将权重(0,1,2)添加到边上,但首先我想看到数据按照拓扑“正确”绘制


Tags: 数据pyposimportnumpytxtas绘制
1条回答
网友
1楼 · 发布于 2024-09-29 19:32:01

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)

相关问题 更多 >

    热门问题