1

私は wxpython を使用した Python インターフェイスを持っています。これにより、ユーザーは行列 (0/1) を入力し、それをグラフ化できます。プログラムは numpy マトリックスを作成し、そのマトリックスから networkx グラフを作成し、matplotlib.pylab を使用してグラフを表示します。

プログラムは推移的、再帰的、および対称クロージャーを取得するなどの他のことも行うため、numpyは必須です... networkxに関しては、行列をグラフ化するためにより良いものをお勧めする場合、別のものを使用できます.matplotlibに関しては嫌いですグラフを表示する他の方法を知っている場合は、アドバイスをお願いします。

ユーザーがグラフボタンをクリックすると、プログラムがマトリックスを読み取り、グラフを作成し、matplotlib がそれを新しいウィンドウに表示します (デフォルト)。ユーザーが最初に matplotlib ウィンドウを閉じずに元のウィンドウに戻って別のマトリックスをグラフ化すると、プログラムがクラッシュします。

また、関係の「矢印」の描き方も、私の意見では魅力的ではありません。

マトリックスをグラフ化するより良い方法が必要です。または、少なくとも myplotlib ウィンドウを強制的に閉じる方法として、plt.close() を試しましたが、うまくいきませんでした。ウィンドウは開いたままになり、両方のウィンドウが表示されます (Not応答しています)、プロセスを終了する必要があります。

これは問題のコードの一部です:

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
4

2 に答える 2

2

あなたの主な不満は、wxがmatplotlibウィンドウを処理する方法にあるようです。Matplotlib の図を wx ウィンドウに埋め込むことができます。次に例を示します。

http://wiki.scipy.org/Matplotlib_figure_in_a_wx_panel (更新)

少し複雑になります。基本的には、コードをコピーして "DemoPlotPanel.draw()" メソッドを置き換える必要があります。描画する軸を指定するには、コードを変更する必要があります。ここのnetworkxドキュメントに埋もれています:

http://networkx.lanl.gov/reference/drawing.html

于 2011-04-17T01:18:51.703 に答える
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

于 2011-04-15T17:08:34.773 に答える