2011-03-24 210 views
1

我有一個使用wxpython的python界面,它允許用戶填充矩陣(0/1),然後爲它們繪製圖形。該程序創建一個numpy矩陣,然後從該矩陣中創建一個networkx圖形,然後使用matplotlib.pylab來顯示該圖形。在Python中繪製關係矩陣

numpy是必須的,因爲程序還做其他事情,比如獲得傳遞性,自反性和對稱性閉包......至於networkx,我可以使用別的東西,如果你推薦其他更好的用於繪製矩陣的東西, matplotlib,我討厭它,請如果你知道任何其他方式來顯示圖請諮詢。

matplotlib是我的問題的來源,當用戶單擊圖形按鈕時,我的程序讀取矩陣,生成圖形,matplotlib將其顯示在新窗口中(默認情況下)。現在,如果用戶返回到原始窗口並在沒有首先關閉matplotlib窗口的情況下繪製不同的矩陣,程序就會崩潰。

在我看來,繪製「箭頭」關係的方式並不吸引人。

我需要一個更好的方式來繪製我的矩陣,或者至少作爲一種強制關閉myplotlib窗口的方式,我嘗試過plt.close()但沒有起作用,窗口將保持打開狀態,並且兩個窗口會說(不迴應),我必須結束程序。

這是代碼的有問題的部分:

import numpy as np 
import networkx as nx 
import matplotlib.pylab as plt 

... ... ...

def graph(values) 
    plt.close()  #with or without this it does not work 
    matrix = np.matrix(values) 
    graph = nx.DiGraph(matrix) 
    nx.draw(graph) 
    plt.show() 
    return 

回答

0

我只是用Networkx文檔的例子:

try: 
    import matplotlib.pyplot as plt 
except: 
    raise 

import networkx as nx 

G=nx.star_graph(20) 
pos=nx.spring_layout(G) 
nx.draw(G,pos) 
plt.show() # display 

所以你plt.close()在開始發言就沒有意義了,喲你應該刪除它。你也應該計算你的節點的座標,句子pos = nx.spring_layout(G)這樣做。您可以調用特定的佈局算法並提供圖G,您將得到一個字典,併爲每個節點返回x和y座標。

擁有的例子在密切關注:http://networkx.lanl.gov/gallery.html