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

时间:2010-06-03 16:21:44

标签: python macos matplotlib scipy dendrogram

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

2 个答案:

答案 0 :(得分:16)

我在Ubuntu 10.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()

答案 1 :(得分:4)

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

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

...
dendrogram(Z)
pylab.savefig( "temp.png" )

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

修正:在hcluster软件包的简要教程中使用copy-and-paste时要小心,特别是如果你在教程中显示的几种类型的树形图之后调用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将包含同一图中的单连锁树状图和完整连锁树状图,它们可能会交叉交叉,看起来像一团糟。

如果你像我一样愚蠢,你会花费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" )

现在,生成的树形图图像文件看起来就像您期望的那样。