0

私は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()
4

1 に答える 1

0

このnx.random_layout関数は、ノードを位置にマッピングする辞書を返します。Python オブジェクトと同様posに、 で行ったように、印刷された文字列バージョンをファイルに保存するだけでは望ましくありませんf.write("%s" % pos)。これにより、辞書を含むファイルが得られますが、それを読み戻すのは簡単ではありません。

代わりに、posそのタスク用に設計された標準ライブラリ モジュールの 1 つを使用してシリアル化し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)
于 2011-12-06T10:39:04.340 に答える