Чтение узлов с атрибутом pos из файла в networkx

Я новичок в Networkx. У меня есть файл, содержащий позицию узлов в следующем формате

0 : 23.23 12.23

где 0 – узел, 23.23 и 12.23 – координаты X и Y соответственно. Кто-нибудь знает, как читать узлы с атрибутом pos , используя функцию, например read_edgelist(...) или аналогичную работу?

благодаря

С read_edgelist вы предполагаете, что у вас уже есть список краев. Однако то, что вы предоставили, – это свойство node +.

Поскольку вы начинаете с файла, который имеет формат файла (указано в ваших комментариях), первая проблема заключается в том, чтобы получить его в формате, который будет легко обрабатываться. По этой причине я предложил формат файла CSV. Чтобы сделать это с вашим файлом, я запустил терминал (Linux и Mac), cd в каталог с вашими файлами и выполнил следующие две команды:

 sed -n 's/ : /,/gpw nodes_replaced1.txt' nodes.txt 

Это считывает nodes.txt (или ваш файл), заменяет все вхождения : (включая пробелы) на, и сохраняет его как nodes_replaced1.txt . Вы можете изменить имена файлов по своему желанию.

Как только это будет сделано, запустите следующую команду в терминале

 sed -n 's/ /,/gwp nodes.csv' nodes_replaced1.txt 

Это будет делать аналогичная вещь, за исключением чтения в nodes_replaced1.txt, заменить [spaces] на, и записать его как файл CSV.

Если у вас есть файл CSV, я бы предложил использовать Pandas для открытия CSV-файла и сделать следующее, чтобы добавить узлы в ваш график:

 In [1]: import pandas as pd In [2]: import networkx as nx In [5]: nodes = pd.read_csv('nodes.csv', header=None) In [6]: nodes Out[6]: 0 1 2 0 0 52.88 52.53 1 1 56.63 49.53 2 2 38.60 69.81 3 3 43.00 2.88 In [7]: G = nx.Graph() In [8]: G Out[8]: <networkx.classes.graph.Graph at 0x105e94cd0> In [9]: for row in nodes.iterrows(): ...: G.add_node(row[1][0], x=row[1][1], y=row[1][2]) ...: In [10]: G.nodes(data=True) Out[10]: [(0.0, {'x': 52.880000000000003, 'y': 52.530000000000001}), (1.0, {'x': 56.630000000000003, 'y': 49.530000000000001}), (2.0, {'x': 38.600000000000001, 'y': 69.810000000000002}), (3.0, {'x': 43.0, 'y': 2.8799999999999999})] 

Вы заметите, что когда я вызываю только G.nodes() , данных позиции x & y нет. Однако, когда я вызываю G.nodes(data=True) , данные позиции x и y включаются.

Для получения дополнительной информации о том, как создать граф и как добавить атрибуты, связанные с любым узлом, краем или графиком, см. На этой странице: http://networkx.github.io/documentation/latest/tutorial/tutorial. HTML # узлы

Наконец, если @Aric когда-либо появляется, чтобы ответить на этот вопрос, пожалуйста, поправьте меня, если я ошибаюсь!