Ubicación del nodo cuando se usa el formato networkx y gexf

Estoy usando networkx para crear un objeto diGraph , poblarlo con nodos y bordes (incluidas varias características) y luego escribir un archivo gefx que estoy visualizando con Gephi.

 import networkx as nx dg = nx.DiGraph() dg.add_node(attribute1, 2, etc...) dg.add_edge(attribute1, 2, etc...) nx.write_gexf("output.gexf") 

Este proceso funciona perfectamente. Ahora necesito asignar ubicaciones a los nodos. He visto que networkx puede hacerlo de alguna manera ( http://networkx.github.com/documentation/latest/examples/drawing/house_with_colors.html ) y también sé que hay una etiqueta de viz para los archivos gexf ( http: // gexf .net / format / viz.html ). Tengo un diccionario con los nombres de los nodos y sus coordenadas. ¿Alguna idea para poner todo esto junto?

Mi opción hasta ahora es leer el archivo gexf ya generado, buscar los nodos y crear la etiqueta viz:position .

Sin embargo, no es muy efectivo y me gustaría hacerlo directamente al agregar los nodos.

Los datos del nodo están disponibles como un diccionario de Python para cada nodo. Aquí hay un ejemplo que muestra cómo se almacenan y manipulan los datos de viz del nodo GEXF.

 In [1]: import sys In [2]: import urllib2 In [3]: import networkx as nx In [4]: data = urllib2.urlopen('http://gexf.net/data/viz.gexf') In [5]: G = nx.read_gexf(data) In [6]: print G.node['a'] {'viz': {'color': {'a': 0.6, 'r': 239, 'b': 66, 'g': 173}, 'position': {'y': 40.109245, 'x': 15.783598, 'z': 0.0}, 'size': 2.0375757}, 'label': 'glossy'} In [7]: G.node['a']['viz']['position']['x']=10 In [8]: G.node['a']['viz']['position']['y']=20 In [9]: print G.node['a'] {'viz': {'color': {'a': 0.6, 'r': 239, 'b': 66, 'g': 173}, 'position': {'y': 20, 'x': 10, 'z': 0.0}, 'size': 2.0375757}, 'label': 'glossy'} In [10]: nx.write_gexf(G,sys.stdout)