scipy-cluster生成的树状图不显示
我正在使用 scipy-cluster 来对一些数据进行层次聚类。在应用的最后一步,我调用了 dendrogram
函数来绘制聚类图。我是在 Mac OS X Snow Leopard 上运行,使用的是内置的 Python 2.6.1 和 这个 matplotlib 包。程序运行得很好,但最后出现了火箭图标(我理解这是 Python 中图形界面应用的启动器),然后立刻消失了,什么也没做。什么都没有显示出来。如果我在调用后加一个 'raw_input',它就会在 dock 中一直弹来弹去。如果我从终端运行一个简单的 matplotlib 示例程序,它就能正常运行。有没有人遇到过类似的情况?
3 个回答
我也遇到过同样的问题。你可以试试下面的方法:
使用 plt.show() :在画完图后用 plt.show(),这样就能显示出图像来。使用 plt.show
在 Jupyter Notebook 中最开始使用 %matplotlib inline。这会在执行后显示出图像。使用 matplotlib inline
用“-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文件会同时包含单链接树状图和完全链接树状图,这样它们可能会交叉在一起,看起来就会很乱。
如果你像我一样傻,可能会花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" )
这样,生成的树状图图像文件就会像你预期的那样显示了。
我在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()