networkx Dodaj węzeł o określonej pozycji

Nadal jestem początkujący z networkx Chcę dodać wiele typów węzłów w różnych pozycjach, użyłem następującego kodu

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')

Ale kiedy chcę uzyskać dostęp do wykresu X, jeśli wpiszę X. węzeł zwróci pustą listę a jeśli chcę dodać więcej węzłów, muszę ustawić ich pozycje na początku używając słownika pos.

Jak mogę dodać węzły do wykresu w określonym miejscu x i y używając add_node ()

Author: Felix Kling, 2012-08-04

2 answers

Nie jestem do końca pewien, co chcesz osiągnąć, ale interpretuję to tak, jak chcesz dodać węzły do wykresu, narysować je w pożądanych pozycjach i nadal mieć do nich dostęp w obiekcie graph.

Ponieważ nie dodajesz węzłów do wykresu, to byłby początek:

X.add_nodes_from(pos.keys())

Wtedy nie musisz określać listy węzłów podczas rysowania wykresu, a tym samym nie musisz zmieniać kodu w dwóch różnych miejscach podczas dodawania nowych węzłów.

Jeśli chcesz położenie węzła jako atrybutu węzła, można też to zrobić:

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

Zauważ, że te pozycje nie będą używane jako pozycja podczas rysowania wykresu, musi być ustawiona jawnie. Można następnie narysować i wyświetlić wykres za pomocą:

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

Zakładając, że dokonałeś importu from matplotlib import pyplot as plt.

 23
Author: Maehler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-04 07:35:04

Możesz użyć następującego podejścia, aby ustawić poszczególne pozycje węzłów, a następnie wyodrębnić słownik " pos " do użycia podczas rysowania.

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)

UPDATE

Dodaj rysunek

Tutaj wpisz opis obrazka

 31
Author: Aric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 18:37:45