networkx add_node с определенной позицией

Я все еще новичок с networkx. Я хочу добавить несколько типов узлов в другое место, я использовал следующий код

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

но когда я хочу получить доступ к графику X, если я нахожу X.node, он возвращает пустой список, и если я хочу добавить больше узлов, я должен установить их позиции в начале, используя словарь слова.

Как добавить узлы к графику в определенном месте x и y, используя add_node()

Ответ 1

Я не совсем уверен в том, чего вы хотите достичь, но я интерпретирую его так, как вы хотите добавить узлы в график, нарисовать их в желаемых позициях и по-прежнему иметь доступ к ним в объекте графика.

Поскольку вы не добавляете узлы в график, это будет началом:

X.add_nodes_from(pos.keys())

Тогда вам не нужно указывать список узлов при рисовании графика, и, следовательно, вам не нужно менять код в двух разных местах при добавлении новых узлов.

Если вы хотите, чтобы позиция узла была атрибутом узла, вы также можете это сделать:

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

Просто обратите внимание, что эти позиции не будут использоваться в качестве позиции при рисовании графика, это должно быть задано явно. Затем вы можете рисовать и отображать график с помощью:

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

предполагая, что вы импортировали from matplotlib import pyplot as plt.

Ответ 2

Вы можете использовать следующий подход для установки позиций отдельных узлов, а затем извлечь словарь "pos" для использования при рисовании.

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)

ОБНОВИТЬ

Добавить рисунок

enter image description here