# Get the list of figures in matplotlib

I would like to:

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

What is the magic function that returns a list of current figures in pylab?

Websearch didn’t help…

## Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

### Solution 1

Pyplot has get_fignums method that returns a list of figure numbers. This should do what you want:

``````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)
``````

### Solution 2

The following one-liner retrieves the list of existing figures:

``````import matplotlib.pyplot as plt
figs = list(map(plt.figure, plt.get_fignums()))
``````

### Solution 3

#### Edit: As Matti Pastell’s solution shows, there is a much better way: use `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)
``````

### Solution 4

This should help you (from the pylab.figure doc):

call signature::

figure(num=None, figsize=(8, 6),
dpi=80, facecolor=’w’, edgecolor=’k’)

Create a new figure and return a
:class:`matplotlib.figure.Figure`
instance.
If num = None, the
figure number will be incremented and
a new figure will be created.** The
returned figure objects have a
number attribute holding this number.

If you want to recall your figures in a loop then a good aproach would be to store your figure instances in a list and to call them in the loop.

``````>> f = pylab.figure()
>> mylist.append(f)
etc...
>> for fig in mylist:
>>     fig.savefig()
``````

### Solution 5

Assuming you haven’t manually specified `num` in any of your figure constructors (so all of your figure numbers are consecutive) and all of the figures that you would like to save actually have things plotted on them…

``````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
``````

Has the side effect of creating a new blank figure, but better if you don’t want to rely on an unsupported interface

### Solution 6

I tend to name my figures using strings rather than using the default (and non-descriptive) integer. Here is a way to retrieve that name and save your figures with a descriptive filename:

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

for figure in figures:
figure.savefig('{0}.png'.format(figure.get_label()))
``````

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0