фигуры matplotlib исчезают между show () и savefig () - PullRequest
8 голосов
/ 16 мая 2011

Я сохранил набор ссылок на рисунки в словаре, чтобы при желании их можно было сохранить позже.Я обеспокоен тем, что сохраненные цифры будут пустыми, если вызвать команду show() и сначала посмотреть на них.Так как командные блоки show() и я не использую шпионоподобный интерпретатор, мне нужно закрыть цифры, прежде чем я доберусь до savefig()

figures['myfig_1'] = figure()
...
figures['myfig_n'] = figure()
...

#show() #disabling this makes the problem go away
print "Saving:"
for fig in figures:
   figure(figures[fig].number)
   savefig(fig)
   print "Figure " + str(figures[fig].number) + ": " + fig

Оператор печати здесь дал мне указаниесловарь по-прежнему не поврежден, что, по-моему, означает, что я не потерял ссылки на цифры (они по-прежнему возвращают значащие числа в своем атрибуте .number)аналогичная вещь в классе, сохраняя словарь в качестве члена и разделяя хранилище и функции сохранения на их собственные методы, этого не происходит.Есть ли что-то в том, как я закрываю цифры или сохраняю данные, из-за которых цифры теряют свои данные?

Ответы [ 2 ]

7 голосов
/ 16 мая 2011

Вообще говоря, в подобных случаях не используйте интерактивный интерфейс конечного автомата matlab-ish для matplotlib.Он предназначен для интерактивного использования.

Вы пытаетесь сделать фигуру «активной» и вместо этого создаете новую фигуру.Не имеет значения, какая фигура активна, если вы просто сохраняете возвращенную фигуру и / или объекты осей и используете их напрямую.(Кроме того, не используйте подстановочный импорт! Вы пожалеете об этом позже, когда будете поддерживать свой код!)

Просто сделайте что-то вроде этого:

import matplotlib.pyplot as plt
figures = {}

figures['a'] = plt.figure()
ax = figures['a'].add_subplot(111)
ax.plot(range(10), 'ro-')

figures['b'] = plt.figure()
ax = figures['b'].add_subplot(111)
ax.plot(range(10), 'bo-')

plt.show()

for name, fig in figures.iteritems():
    fig.savefig('figure-%s.png' % name)
2 голосов
/ 17 мая 2011

Из документации , уничтожены ли элементы чертежа из show(), зависит от бэкэнда и версии matplotlib. Отсутствие уничтоженных фигур, по-видимому, доступно в версии 1.1.0. Чтобы выяснить , какой бэкэнд используется , используйте функцию get_backend(). В моем случае я использовал бэкэнд Qt4Agg. При вызове бэкэнда TkAgg с вызовом matplotlib.use('TkAgg') цифры не были уничтожены до сохранения. Теперь, чтобы узнать, как изменить поведение Qt4Agg ...

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