2010-07-12 134 views
1

我在我的應用程序中使用scipy-cluster。它提供了繪製分層聚類樹的樹狀圖的功能。看着源頭,我發現它最終通過調用draw_if_interactive繪製樹狀圖。正如人們所期望的那樣,這在交互式會話中可以正常工作,但是當我非交互式地運行腳本時,會彈出一個窗口並立即再次消失(我已配置matplotlib以使用macosx-backend)。我需要一種方法讓我的應用程序等待,直到用戶關閉顯示劇情的窗口,或者直接渲染到文件中(實際上我更喜歡)。同樣,問題是,我無法修改生成劇情的代碼,所以解決方案可能會涉及matplotlib的一些配置設置或類似的東西。在Mac OS X上使用matplotlib進行非交互式繪圖

編輯:我將當前的解決方法添加爲答案,以便其他人可以使用它。既然它非常醜陋,我會留下這個問題,希望有人提出一個更好的解決方案。

回答

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 -module導入後執行。這在很多方面都很難看,但至少(感謝Python的動態特性)我不需要修改源代碼。讓我爲每個情節設置文件名,這正是我需要的。

1

macosx後端不能正確支持非交互模式(即設置交互關閉不起作用)。您可能更願意使用AGG backend -

import matplotlib 
matplotlib.use('AGG')