web-dev-qa-db-fra.com

networkx add_node avec position spécifique

Je suis toujours débutant avec networkx je veux ajouter plusieurs types de nœuds dans des positions différentes, j'ai utilisé le code suivant

pos = {0: (40, 20), 1: (20, 30), 2: (40, 30), 3: (30, 10)} 
X=nx.Graph()
nx.draw_networkx_nodes(X,pos,node_size=3000,nodelist=[0,1,2,3],node_color='r')

mais quand je veux accéder au graphique X, si je tape X.node, il renvoie une liste vide et si je veux ajouter plus de nœuds, je dois définir leurs positions au début en utilisant le dictionnaire pos.

Comment puis-je ajouter des nœuds à un graphique dans un emplacement spécifique x et y en utilisant add_node ()

27
NBaz

Je ne suis pas complètement sûr de ce que vous voulez accomplir, mais je l'interprète comme si vous vouliez ajouter des nœuds au graphique, les dessiner dans les positions voulues et toujours pouvoir y accéder dans l'objet graphique.

Puisque vous n'ajoutez pas les nœuds au graphique, ce serait un début:

X.add_nodes_from(pos.keys())

Ensuite, vous n'avez pas besoin de spécifier la liste des nœuds lors du dessin du graphique, et donc vous n'avez pas à modifier le code à deux endroits différents lors de l'ajout de nouveaux nœuds.

Si vous voulez la position du nœud comme attribut de nœud, vous pouvez également le faire:

for n, p in pos.iteritems():
    X.node[n]['pos'] = p

Notez simplement que ces positions ne seront pas utilisées comme position lors du dessin du graphique, elles doivent être définies explicitement. Vous pouvez ensuite dessiner et afficher le graphique avec:

nx.draw(X, pos)
plt.show()

en supposant que vous avez fait l'importation from matplotlib import pyplot as plt.

30
Maehler

Vous pouvez utiliser l'approche suivante pour définir les positions des nœuds individuels, puis extraire le dictionnaire "pos" à utiliser lors du dessin.

In [1]: import networkx as nx

In [2]: G=nx.Graph()

In [3]: G.add_node(1,pos=(1,1))

In [4]: G.add_node(2,pos=(2,2))

In [5]: G.add_Edge(1,2)

In [6]: pos=nx.get_node_attributes(G,'pos')

In [7]: pos
Out[7]: {1: (1, 1), 2: (2, 2)}

In [8]: nx.draw(G,pos)

[~ # ~] mise à jour [~ # ~]

Ajouter un dessin

enter image description here

37
Aric