Получить список цифр в matplotlib
Я хотел бы:
pylab.figure()
pylab.plot(x)
pylab.figure()
pylab.plot(y)
# ...
for i, figure in enumerate(pylab.MagicFunctionReturnsListOfAllFigures()):
figure.savefig('figure%d.png' % i)
Что такое волшебная функция, которая возвращает список текущих цифр в pylab?
Веб-поиск не помог...
Ответы
Ответ 1
Изменить: Поскольку показывает решение Matti Pastell, есть намного лучший способ: используйте 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)
Ответ 2
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)
Ответ 3
Следующий однострочный файл извлекает список существующих цифр:
import matplotlib.pyplot as plt
figs = list(map(plt.figure, plt.get_fignums()))
Ответ 4
Это должно помочь вам (из документа pylab.figure):
подпись вызова::
figure (num = None, figsize = (8, 6), dpi = 80, facecolor = 'w', edgecolor = 'k')
Создайте новую фигуру и верните: Класс: matplotlib.figure.Figure
instance. Если num = None, число цифр будет увеличено и новая цифра будет создана. ** возвращенные объекты фигуры имеют number, удерживая это число.
Если вы хотите напомнить свои цифры в цикле, то хорошим aproach будет хранение экземпляров фигур в списке и их вызов в цикле.
>> f = pylab.figure()
>> mylist.append(f)
etc...
>> for fig in mylist:
>> fig.savefig()
Ответ 5
Предполагая, что вы не указали вручную 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
Имеет побочный эффект создания новой пустой фигуры, но лучше, если вы не хотите полагаться на неподдерживаемый интерфейс
Ответ 6
Я склонен называть мои цифры с помощью строк, а не использовать стандартное (и не описательное) целое число. Вот способ получить это имя и сохранить ваши рисунки с описательным именем файла:
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()))