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]()