我是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()
答案 0 :(得分:0)
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)