Networkx: импорт графа со значениями узлов и информации о ребрах - PullRequest
0 голосов
/ 05 декабря 2011

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

Код для экспорта значений узлов и информации о ребрах.

G=nx.random_geometric_graph(10,0.5) 
filename = "ipRandomGrid.txt" 
fh=open(filename,'wb') 
nx.write_adjlist(G, fh) 
nx.draw(G) 
plt.show()

Я пытаюсь экспортировать его с помощьюкод ниже и пытается изменить цвет некоторых узлов.Но он генерирует другой граф.

filename = "ipRandomGrid.txt" 
fh=open(filename, 'rb') 
G=nx.Graph() 
G=nx.read_adjlist("ipRandomGrid.txt") 
pos=nx.random_layout(G) 
nx.draw_networkx_nodes(G,pos,nodelist=['1','2'],node_color='b') 
nx.draw(G) 
plt.show()

Как создать тот же граф с небольшим изменением цвета некоторых узлов?

Ответы [ 2 ]

1 голос
/ 05 января 2013

Самый простой способ сохранить данные о положении узла для вашего случая - использовать Python pickles. NetworkX имеет функцию write_gpickle (), которая сделает это за вас. Обратите внимание, что позиции уже доступны в качестве атрибутов узла при создании случайного геометрического графика, поэтому вы, вероятно, захотите использовать их при рисовании. Вот пример того, как генерировать, сохранять, загружать и рисовать один и тот же график.

In [1]: import networkx as nx

In [2]: G=nx.random_geometric_graph(10,0.5)

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

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

In [5]: nx.write_gpickle(G,'rgg.gpl')

In [6]: H=nx.read_gpickle('rgg.gpl')

In [7]: pos = nx.get_node_attributes(H,'pos')

In [8]: nx.draw(H,pos)
1 голос
/ 05 декабря 2011

Если я правильно понимаю проблему, с которой вы столкнулись, проблема здесь:

pos=nx.random_layout(G) 
nx.draw_networkx_nodes(G,pos,nodelist=['1','2'],node_color='b') 
nx.draw(G) 

Вы создаете случайный макет графика в первой строке и используете его для рисования узлов '1' и '2' во второй строке. Затем вы снова рисуете график в третьей строке, не указывая позиции, которая использует модель пружины для позиционирования узлов.

У вашего графика нет лишних узлов, вы только что нарисовали два из них в двух разных позициях. Если вы хотите последовательно рисовать график одинаково, вам нужно последовательно использовать pos, который вы рассчитали. Если вы хотите, чтобы после сохранения и перезагрузки он был таким же, сохраните также pos.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...