由scipy-cluster生成的树形图没有显示

Bjö*_*lex 13 python macos matplotlib dendrogram scipy

我正在使用scipy-cluster为某些数据生成层次聚类.作为应用程序的最后一步,我调用dendrogram函数绘制聚类.我使用内置的Python 2.6.1和这个matplotlib包在Mac OS X Snow Leopard上运行.程序运行正常,但最后Rocket Ship图标(据我所知,这是python中GUI应用程序的启动程序)显示并立即消失而不做任何事情.没有显示任何内容.如果我在通话后添加'raw_input',它就会永久地在停靠栏中上下跳动.如果我从终端运行matplotlib的简单示例应用程序,它运行正常.有没有人有这方面的经验?

Pēt*_*une 16

我在Ubuntu 10.04上遇到了同样的问题.为了从ipython交互式控制台显示图形,请使用"-pylab"开关启动它,这样就可以交互使用matplotlib:

ipython -pylab
Run Code Online (Sandbox Code Playgroud)

要在执行独立脚本期间显示图形,请使用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()
Run Code Online (Sandbox Code Playgroud)


J.B*_*own 5

使用“-pylab”开关调用 ipython 对我没有任何影响。(系统:Fedora 13)

虽然不理想,但我的解决方案是将结果图明确写入文件。例如:

...
dendrogram(Z)
pylab.savefig( "temp.png" )
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助遇到相同问题的任何人。

修正:在 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" )
Run Code Online (Sandbox Code Playgroud)

那么exampleDendrogram.png将在同一个图中同时包含单链接树状图和完整链接树状图,它们可能会交叉并看起来像一团糟。

如果你和我一样愚蠢,你会在 30-180 分钟的时间里对如何正确使用 hcluster 感到困惑,而这实际上只是在树状图调用之间重置 matplotlib 的问题:

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" )
Run Code Online (Sandbox Code Playgroud)

现在,生成的树状图图像文件将如您所愿。