scipy-clusterを使用して、一部のデータに階層的クラスタリングを生成しています。アプリケーションの最後のステップとして、dendrogram
クラスタリングをプロットする関数を呼び出します。組み込みのPython2.6.1とこのmatplotlibパッケージを使用してMacOSXSnowLeopardで実行しています。プログラムは正常に実行されますが、最後にRocket Shipアイコン(私が理解しているように、これはPythonのGUIアプリケーションのランチャーです)が表示され、何もせずにすぐに消えます。何も表示されません。呼び出しの後に「raw_input」を追加すると、ドック内で永久に上下にバウンスします。ターミナルからmatplotlibの簡単なサンプルアプリケーションを実行すると、正常に実行されます。誰かがこれについて何か経験がありますか?
3 に答える
Ubuntu10.04でも同じ問題が発生しました。ipythonインタラクティブコンソールからグラフィックを表示するには、「-pylab」スイッチで起動します。これにより、matplotlibのインタラクティブな使用が可能になります。
ipython -pylab
スタンドアロンスクリプトの実行中にグラフィックを表示するには、matplotlib.pyplot.show呼び出しを使用します。これはhclusterホームページの例です。最初と最後の行は、ここで重要な部分です。
from matplotlib.pyplot import show
from hcluster import pdist, linkage, dendrogram
import numpy
from numpy.random import rand
X = rand(10,100)
X[0:5,:] *= 2
Y = pdist(X)
Z = linkage(Y)
dendrogram(Z)
show()
「-pylab」スイッチを使用してipythonを呼び出しても、違いはありませんでした。(システム:Fedora 13)
理想的ではありませんが、私の解決策は、結果の図をファイルとして明示的に書き込むことでした。例えば:
...
dendrogram(Z)
pylab.savefig( "temp.png" )
これが同じ問題に直面している人に役立つことを願っています。
修正:hclusterパッケージの簡単なチュートリアルでコピーアンドペーストを使用する場合は特に注意してください。特に、チュートリアルに示されているいくつかのタイプの樹状図の描画後にpylab.savefig()を呼び出す場合は注意が必要です。
distMat = # whatever distance matrix you have
dendrogram( linkage( distMat ) )
pylab.savefig( "exampleDendrogram.png" )
dendrogram( linkage( distMat, method="complete" ) ) #instead of default "single"
pylab.savefig( "exampleDendrogram.png" )
次に、exampleDendrogram.pngには、同じ図に単一リンケージ樹状図と完全リンケージ樹状図の両方が含まれ、それらは交差して混乱しているように見える可能性があります。
私と同じくらい愚かであるなら、樹状図の呼び出しの間にmatplotlibをリセットするだけの問題であるときに、hclusterを適切に使用する方法について混乱して30〜180分を費やします。
distMat = # whatever distance matrix you have
dendrogram( linkage( distMat ) )
pylab.savefig( "exampleDendrogram1.png" )
pylab.cla()
dendrogram( linkage( distMat, method="complete" ) ) #instead of default "single"
pylab.savefig( "exampleDendrogram2.png" )
これで、結果の樹状図画像ファイルは、期待したとおりになります。
私は同じ問題に直面しています。以下のいずれかの方法を使用できます
plt.show()を使用する:dedogramの後にplt.show()を使用します。これにより、plt.show を使用してプロットが表示されます。
jupyterノートブックで最初に%matplotlibをインラインで使用します。これにより、実行後のプロットが表示されます。 matplotlibインラインを使用する