2017-06-29 2 views
1

Je suis en train de tracer un graphique à l'aide NetworkX« noeud « 0 » n'a pas de position - problèmes avec l'attribution des postes de nœud aux « types de nœuds » dans NetworkX/Python

J'ai défini les positions précises comme:

.
pos={0:(40,100), 1:(50,100), 2:(45,80), 3:(55,80), 4:(50,60), 5:(50,40), 6:(50,20)} 

Je puis en séparant les noeuds en deux 'types', alors disons que les noeuds 0, 2, 4, 6 sont 'taper un' et 1, 3, 5 sont 'type b' Je les ajoute aux deux listes de noeuds différentes à l'aide de la fonction append.Maintenant, j'ai les deux listes de noeuds différentes: type_a et type_b et peut les tracer - par exemple en utilisant:

nx.draw_networkx_nodes(G, pos, nodelist=type_a, node_size=2000,node_shape="s", node_color='g', labels=exploit_node_labels, with_labels=True, alpha=1) 

Mon problème est d'être en mesure d'affecter les positions de noeud à noeud au moment où je le noeud allouer. Comment allouer 'pos' au moment d'ajouter les noeuds aux deux listes différentes?

Cette approche me donne une erreur comme suit:

nx.draw_networkx_nodes(G, pos, nodelist=type_a, node_size=2000,node_shape="s", node_color='g', labels=exploit_node_labels, with_labels=True, alpha=1) 
      File "C:\Program Files\Python36\lib\site-packages\networkx\drawing\nx_pylab.py", line 386, in draw_networkx_nodes 
      raise nx.NetworkXError('Node %s has no position.'%e) 

networkx.exception.NetworkXError: Node '0' has no position. 

Répondre

1

Apparemment, les noeuds de votre graphique G sont des chaînes de nombres, par exemple, '0', '1','2' ... au lieu des entiers 0,1,2 ... Cependant, vous êtes définir les positions en utilisant pos en utilisant des entiers au lieu de chaînes. Essayez de définir vos positions comme suit et cela devrait fonctionner

pos={'0':(40,100), '1':(50,100), '2':(45,80), '3':(55,80), '4':(50,60), '5':(50,40), '6':(50,20)} 
+0

Merveilleux merci !!!!! –