2011-12-05 91 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'在第二行。然後,您再次在第三行繪製圖形,而不指定位置,它使用彈簧模型來定位節點。

你的圖沒有額外的節點,你剛纔在兩個不同的位置畫了兩個。如果您想要以同樣的方式繪製圖表,則需要始終使用您計算的pos。如果您希望在存儲和重新加載後保持不變,則還應保存pos

1

爲您的案例存儲節點位置數據的最簡單方法可能是使用Python pickles。 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) 
相關問題