Импорт позиции макета для графа с использованием networkx - PullRequest
0 голосов
/ 06 декабря 2011

Я очень новичок в Networkx. Я пытаюсь импортировать положение макета, созданное функцией random_layout(). Я не знаю, как это сделать.

Код для создания позиции макета:

G = nx.random_geometric_graph(10, 0.5)
pos = nx.random_layout(G)
nx.set_node_attributes(G, 'pos', pos)
f = open("graphLayout.txt", 'wb')
f.write("%s" % pos)
f.close()
print pos
filename = "ipRandomGrid.txt"
fh = open(filename, 'wb')
nx.write_adjlist(G, fh)
#nx.write_graphml(G, sys.stdout)
nx.draw(G)
plt.show()
fh.close()

Файл: ipRandomGrid.txt

# GMT Tue Dec 06 04:28:27 2011
# Random Geometric Graph
0 1 3 4 6 8 9 
1 3 4 6 8 9 
2 4 7 
3 8 6 
4 5 6 7 8 
5 8 9 6 7 
6 7 8 9 
7 9 
8 9 
9 

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

Код при импорте: Псевдокод

G = nx.Graph() 
G = nx.read_adjlist("ipRandomGrid.txt")
# load POS value from file 
nx.draw(G)
nx.draw_networkx_nodes(G, pos, nodelist=['1','2'], node_color='b')
plt.show()

1 Ответ

0 голосов
/ 06 декабря 2011

Функция nx.random_layout возвращает словарь, отображающий узлы в позиции.Поскольку pos является объектом Python, вы не хотите просто сохранять его печатную строковую версию в файле, как вы это делали в f.write("%s" % pos).Это дает вам файл, содержащий ваш словарь, но читать его обратно не так просто.

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

with open("graphLayout.txt", 'wb') as f:
    pickle.dump(pos, f)

Перезагрузка:

with open("graphLayout.txt", 'rb') as f:
    pos = pickle.load(f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...