0

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()

一部のノードの色をほとんど変更せずに同じグラフを生成するにはどうすればよいですか?

4

2 に答える 2

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もしてください。

于 2011-12-05T09:15:15.773 に答える
1

ケースのノード位置データを保存する最も簡単な方法は、Python の pickle を使用することです。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)
于 2013-01-05T19:34:02.227 に答える