2012-12-09 18 views
2

我想繪製距離矩陣的圖形。代碼工作正常,並給我一個圖像。圖像很大,但所有節點都打包在一起。我想增加節點之間的空間。 我希望節點分開更多而不是放大。使節點更加分離(圖形可視化)

我試過Graphviz NEATO,但問題是它只支持100個節點,因爲我有1000個節點,它顯示了10個節點,每個節點有100個節點。

我的總代碼 -

import networkx as nx 
import pickle 
import matplotlib.pyplot as plt 
print "~~~Unpickle." 
p_file = open('pickles/names') 
Names = pickle.load(p_file) 
p_file.close() 
p_file = open('pickles/distance') 
Dist = pickle.load(p_file) 
p_file.close() 

G = nx.Graph() 

print "~~~Inserting Nodes." 
for store in Names: 
    G.add_node(store) 

print "~~~Inserting Edges." 

for i in range(601): 
    for j in range(601): 
     if Names[i]!=Names[j]: 
      G.add_edge(Names[i],Names[j],weight=Dist[i][j]) 
print "~~~Drawing Graph." 
nx.draw(G,pos,node_color='#A0CBE2',edge_color='none',width=1, edge_cmap=plt.cm.Blues, with_labels=False) 
print "~~~Saving Figure." 
plt.savefig("graph.png", dpi=500, facecolor='w', edgecolor='w',orientation='portrait', papertype=None, format=None,transparent=False, bbox_inches=None, pad_inches=0.1) 
print "~~~Success!" 

輸出(邊緣和標籤移除): enter image description here

600個節點Graphvix NEATO的輸出 -

enter image description here

回答

3

figure文檔:

figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

所以圖(figsize =(10,10))產生一個10英寸-by- 10英寸的圖像,這將是800×800像素。

如果要打印大型網絡圖形,最簡單的方法是增加DPI。

試着這麼做:

plt.figure(num=None, figsize=(10, 10), dpi=1200). This will produce a large image file.

您也可以嘗試打印PDF

plt.savefig("graph.pdf")

使用此選項,最終圖表將不被光柵化。

要更改節點之間的距離,可以減小節點或更改佈局。改變 佈局很難做好。

嘗試在佈局 例如縮放選項,

scale = 2

將所有節點之間距離的兩倍。

因此,在你的榜樣,改線

nx.draw(G)

pos = nx.circular_layout(G, scale=2) 
nx.draw(G, pos) 

您還可以使用不同的佈局,請documentation瞭解更多詳情。

+0

在你的新代碼這條線上的pos是什麼? 'nx.draw(G,pos,node_color ='#A0CBE2',edge_color ='none',width = 1,edge_cmap = plt.cm.Blues,with_labels = False) '嘗試寫'pos = nx.graphviz_layout(G )'之前的一條線。或嘗試不同的佈局。 – rputikar

+0

'pos = nx.spring_layout(G,scale = 2)'也試過graphviz_layout(G),circular_layout(G,scale = 2)。在繪圖參數中沒有任何東西可以幫助 – Anirudh

+0

嘗試node_size例如'node_size = 15' – rputikar