Я пытаюсь получить положение всех узлов, которые превращаются в мой график.Текущая цель состоит в том, чтобы создать все узлы, которые имеют координаты x
и y
.
То, что я читал, касается атрибутов при использовании add_nodes_from()
и, возможно, создать атрибут позиции для моих узлов.Чтение небольшого количества документации и другого StackOverflow для меня неудачно.
ex.txt файл:
a2a 5 0
##start
a0 1 2
##end
a1 9 2
3 5 4
файл python:
import re
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
def file_parsing(file_path):
cnt = 0
output_list = []
with open(file_path, 'r') as fp:
for line in fp:
cnt += 1
#checks for the room name and coordinates
if re.match('([^\s#]{1,10}) (\d+) (\d+)', line, re.MULTILINE):
output_list.append(line.strip().split(' '))
#checks for start
if line.startswith('##start'):
output_list.append(next(fp, '').strip().split())
#checks for start
if line.startswith('##end'):
output_list.append(next(fp, '').strip().split())
room_name = [item[0] for item in output_list]
x_coord = [int(item[1]) for item in output_list]
y_coord = [int(item[2]) for item in output_list]
x_y = list(zip(x_coord, y_coord))
return (room_name, output_list, x_y)
rooms, room_coords, xpos_ypos = file_parsing('ex.txt')
print("Room information: ", room_coords)
print("X and Y position as tuple list: ", xpos_ypos)
DG = nx.DiGraph()
DG.add_nodes_from(rooms, pos = xpos_ypos)
pos = nx.get_node_attributes(DG, 'pos')
print(pos)
plt.figure()
nx.draw_networkx(DG)
Как видите,У меня есть xpos_ypos
в zip, который создает список кортежей.И мой порядок итераций имеет значение, потому что первая комната будет иметь координаты x и y из первого кортежа.
Например, моя первая комната - a2a
, которая будет иметь координату (5, 0)
.Номер a0
будет иметь координаты, если (1, 2)
.Теперь, если я хочу делать одно и то же снова и снова для каждой комнаты: как я могу добавить атрибуты координат комнаты для каждой комнаты?В моем случае я получаю словарь в результате:
{'a2a': [(5, 0), (1, 2), (9, 2), (5, 4)], 'a0': [(5, 0), (1, 2), (9, 2), (5, 4)], 'a1': [(5, 0), (1, 2), (9, 2), (5, 4)], '3': [(5, 0), (1, 2), (9, 2), (5, 4)]}
, и это вывод draw_networkx(DG)
: