2011-12-05 14 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'中を描画するためにそれを使用します2行目。 3番目の行にグラフをもう一度描きます。位置を指定することなく、ノードを配置するスプリングモデルを使用します。

グラフに余分なノードがなく、2つの異なる位置に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) 
関連する問題