我正在使用scipy-cluster在某些数据上生成层次聚类。作为应用程序的最后一步,我调用该dendrogram
函数来绘制聚类。我使用内置的 Python 2.6.1 和这个 matplotlib 包在 Mac OS X Snow Leopard 上运行。程序运行良好,但最后 Rocket Ship 图标(据我了解,这是 python 中的 GUI 应用程序的启动器)出现并立即消失,没有做任何事情。什么都没有显示。如果我在通话后添加一个“raw_input”,它只会在扩展坞中永远上下弹跳。如果我从终端运行一个简单的 matplotlib 示例应用程序,它运行良好。有没有人有这方面的经验?
3 回答
我在 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()
使用“-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" )
现在,生成的树状图图像文件将与您预期的一样。
我一直面临着同样的问题。您可以使用以下方法之一
使用 plt.show() :在 dedogram 之后使用 plt.show(),这将 使用 plt.show显示绘图
在 jupyter notebook 中最初使用 %matplotlib inline。这将显示执行后的情节。 使用 matplotlib 内联