Lectura de nodos con atributo pos desde archivo en networkx

Soy nuevo en Networkx. Tengo un archivo que contiene la posición de los nodos en el siguiente formato

0 : 23.23 12.23

donde 0 es un nodo, 23.23 y 12.23 son coordenadas X e Y respectivamente. ¿Alguien sabe cómo leer nodos con atributo pos , usando una función como read_edgelist(...) o similar?

Gracias

Con read_edgelist , está asumiendo que ya tiene una lista de borde presente. Sin embargo, lo que ha proporcionado es un nodo + propiedades.

Dado que comienza con un archivo que tiene el formato de archivo (indicado en sus comentarios), el primer desafío es obtener un formato que sea fácil de analizar. Sugerí el formato de archivo CSV por esa razón. Para hacer esto con su archivo, activaría la Terminal (Linux y Mac), ingresaría el directorio con sus archivos y ejecutaría los siguientes dos comandos:

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

Esto lee nodes.txt (o su archivo), reemplaza todas las apariciones de : (incluyendo espacios) con, y lo guarda como nodes_replaced1.txt . Puede cambiar los nombres de los archivos a voluntad.

Una vez hecho esto, ejecute el siguiente comando en la terminal

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

Esto hará algo similar, excepto leer en nodes_replaced1.txt, reemplazar [spaces] con, y escribirlo como un archivo CSV.

Una vez que tenga un archivo CSV, sugeriría usar Pandas para abrir el archivo CSV y hacer lo siguiente para agregar nodos a su gráfico:

 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]:  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() que cuando llamo a G.nodes() solo, no hay datos de posición x & y. Sin embargo, cuando llamo a G.nodes(data=True) , se incorporan los datos de posición x e y.

Para obtener más información sobre cómo crear un gráfico y cómo colocar los ‘atributos’ asociados con cualquier nodo, borde o gráfico, consulte esta página: http://networkx.github.io/documentation/latest/tutorial/tutorial. html # nodos

Finalmente, si @Aric aparece alguna vez para responder esta pregunta, ¡corríjame si me equivoco!