我在我的应用程序中使用scipy-cluster。它提供了绘制分层聚类树的树形图的功能。查看源代码,我发现它最终通过调用draw_if_interactive
来绘制树形图。正如人们所料,这在交互式会话中工作正常,但是当我以非交互方式运行脚本时,会弹出一个窗口并立即消失(我已将matplotlib配置为使用macosx
-backend)。我需要一种方法让我的应用程序等到用户关闭显示绘图的窗口,或者让它直接渲染到文件中(实际上我更喜欢)。同样,问题是,我无法修改生成绘图的代码,因此解决方案可能涉及matplotlib的某些配置设置或类似的东西。
编辑:我将当前的解决方法添加为答案,以便其他人可以使用它。由于它非常难看,我将把这个问题留下来,希望有人能提出更好的解决方案。
答案 0 :(得分:1)
macosx后端不能正确支持非交互模式(即设置交互式关闭无效)。您可能更喜欢使用AGG backend -
import matplotlib
matplotlib.use('AGG')
答案 1 :(得分:0)
所以,这就是我现在想出的:
class myplot(object):
def __init__(self, filename):
self._filename = filename
def resetFileName(self, fileName):
self._filename = fileName
def __call__(self):
matplotlib.pylab.savefig(self._filename)
plotfunction = myplot("foo.png")
matplotlib.pylab.draw_if_interactive = plotfunction
必须在导入hcluster
- 模块后执行此操作。这在很多方面都是丑陋的,但至少(由于Python的动态特性)我不必修改源代码。它让我为每个情节设置文件名,这正是我需要的。