Неинтерактивное построение сюжетов с помощью matplotlib в Mac OS X - PullRequest
1 голос
/ 12 июля 2010

Я использую scipy-cluster в моем приложении.Он предоставляет функцию для построения дендрограммы иерархического дерева кластеров.Глядя на источник, я обнаружил, что в конечном итоге он строит дендрограмму, вызывая draw_if_interactive.Как и следовало ожидать, это прекрасно работает в интерактивном сеансе, но когда я запускаю сценарий неинтерактивно, окно всплывает и сразу же снова исчезает (я настроил matplotlib для использования macosx -backend ).Мне нужен способ заставить мое приложение ждать, пока пользователь не закроет окно с графиком, или сделать так, чтобы оно отображалось непосредственно в файл (что на самом деле я бы предпочел).Опять же, проблема в том, что я не могу изменить код, который генерирует график, поэтому решение, вероятно, будет включать некоторые параметры конфигурации для matplotlib или что-то в этом роде.

EDIT : я добавил свойТекущий обходной путь в качестве ответа, так что другие могут использовать его.Поскольку это очень уродливо, я оставлю этот вопрос открытым, надеясь, что кто-то найдет лучшее решение.

Ответы [ 2 ]

1 голос
/ 18 декабря 2012

Бэкэнд macosx не поддерживает должным образом неинтерактивный режим (т. Е. Отключение интерактивного режима не действует).Для этого вы можете предпочесть использовать AGG backend -

import matplotlib
matplotlib.use('AGG')
0 голосов
/ 12 июля 2010

Итак, вот что я придумал сейчас:

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) мне не нужно изменять исходный код.Это позволяет мне установить имя файла для каждого графика, и это как раз то, что мне нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...