Получить список фигур в matplotlib - PullRequest
43 голосов
/ 24 сентября 2010

Я бы хотел:

pylab.figure()
pylab.plot(x)
pylab.figure()
pylab.plot(y)
# ...
for i, figure in enumerate(pylab.MagicFunctionReturnsListOfAllFigures()):
  figure.savefig('figure%d.png' % i)

Какая магическая функция возвращает список текущих фигур в pylab?

Веб-поиск не помог ...

Ответы [ 6 ]

84 голосов
/ 09 апреля 2013

Pyplot имеет get_fignums метод, который возвращает список номеров фигур. Это должно делать то, что вы хотите:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(100)
y = -x

plt.figure()
plt.plot(x)
plt.figure()
plt.plot(y)

for i in plt.get_fignums():
    plt.figure(i)
    plt.savefig('figure%d.png' % i)
15 голосов
/ 21 октября 2014

Следующая однострочная строка возвращает список существующих фигур:

import matplotlib.pyplot as plt
figs = list(map(plt.figure, plt.get_fignums()))
15 голосов
/ 24 сентября 2010

Редактировать: Как показывает решение Матти Пастелла , есть гораздо лучший способ: использовать plt.get_fignums().


import numpy as np
import pylab
import matplotlib._pylab_helpers

x=np.random.random((10,10))
y=np.random.random((10,10))
pylab.figure()
pylab.plot(x)
pylab.figure()
pylab.plot(y)

figures=[manager.canvas.figure
         for manager in matplotlib._pylab_helpers.Gcf.get_all_fig_managers()]
print(figures)

# [<matplotlib.figure.Figure object at 0xb788ac6c>, <matplotlib.figure.Figure object at 0xa143d0c>]

for i, figure in enumerate(figures):
    figure.savefig('figure%d.png' % i)
3 голосов
/ 24 сентября 2010

Это должно помочь вам (из документа pylab.figure):

подпись звонка ::

цифра (num = None, figsize = (8, 6), dpi = 80, facecolor = 'w', edgecolor = 'k')

Создать новую фигуру и вернуть : Класс: matplotlib.figure.Figure экземпляр. Если номер = Нет , номер фигуры будет увеличен и новая фигура будет создана. ** возвращенные объекты фигуры имеют число атрибут, содержащий этот номер.

Если вы хотите вызвать ваши фигуры в цикле, то хорошим подходом будет сохранить ваши экземпляры фигур в списке и вызвать их в цикле.

>> f = pylab.figure()
>> mylist.append(f)
etc...
>> for fig in mylist:
>>     fig.savefig()
2 голосов
/ 30 июня 2011

Предполагая, что вы не указали num вручную ни в одном из конструкторов ваших фигур (так что все ваши номера фигур являются последовательными), и на всех фигурах, которые вы хотели бы сохранить, на самом деле на них нанесены объекты ...

import matplotlib.pyplot as plt
plot_some_stuff()
# find all figures
figures = []
for i in range(maximum_number_of_possible_figures):
    fig = plt.figure(i)
    if fig.axes:
        figures.append(fig)
    else:
        break

Имеет побочный эффект создания новой пустой фигуры, но лучше, если вы не хотите полагаться на неподдерживаемый интерфейс

1 голос
/ 26 марта 2013

Я склонен называть свои цифры, используя строки, а не целое число по умолчанию (и не описательное). Вот способ получить это имя и сохранить ваши цифры с описательным именем файла:

import matplotlib.pyplot as plt
figures = []
figures.append(plt.figure(num='map'))
# Make a bunch of figures ...
assert figures[0].get_label() == 'map'

for figure in figures:
    figure.savefig('{0}.png'.format(figure.get_label()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...