13

我正在使用scipy-cluster在某些数据上生成层次聚类。作为应用程序的最后一步,我调用该dendrogram函数来绘制聚类。我使用内置的 Python 2.6.1 和这个 matplotlib 包在 Mac OS X Snow Leopard 上运行。程序运行良好,但最后 Rocket Ship 图标(据我了解,这是 python 中的 GUI 应用程序的启动器)出现并立即消失,没有做任何事情。什么都没有显示。如果我在通话后添加一个“raw_input”,它只会在扩展坞中永远上下弹跳。如果我从终端运行一个简单的 matplotlib 示例应用程序,它运行良好。有没有人有这方面的经验?

4

3 回答 3

17

我在 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()
于 2010-09-28T10:34:50.220 回答
5

使用“-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" )

现在,生成的树状图图像文件将与您预期的一样。

于 2012-01-20T02:42:38.450 回答
1

我一直面临着同样的问题。您可以使用以下方法之一

  1. 使用 plt.show() :在 dedogram 之后使用 plt.show(),这将 使用 plt.show显示绘图

  2. 在 jupyter notebook 中最初使用 %matplotlib inline。这将显示执行后的情节。 使用 matplotlib 内联

于 2021-10-27T17:56:00.420 回答