2011-12-05 2 views
0

Я генерирую случайный геометрический граф, используя networkx. Я экспортирую всю информацию о узлах и ребрах в файл. Я хочу сгенерировать один и тот же граф, импортируя всю информацию о узлах и ребрах из файла.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() 

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

+0

Что вы подразумеваете под "другим графиком"? Пожалуйста, используйте код, который показывает разницу, которую вы имеете в виду, а не произвольный набор графических манипуляций. В частности, разные случайные макеты графа не показывают значимой разницы. –

+0

Он генерирует 2 дополнительных узла 1 и 2 в случайном месте на графике. Идея состоит в том, чтобы иметь тот же график, имеющий ту же позицию с небольшими изменениями в цветах узлов. –

+0

Графики не имеют позиций. Значит, ты говоришь о макете? –

ответ

1

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

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

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

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

1

Самый простой способ хранения данных позиции узла для вашего случая может заключаться в использовании соленья Python. 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) 
Смежные вопросы