J'aimerais:
pylab.figure()
pylab.plot(x)
pylab.figure()
pylab.plot(y)
# ...
for i, figure in enumerate(pylab.MagicFunctionReturnsListOfAllFigures()):
figure.savefig('figure%d.png' % i)
Quelle est la fonction magique qui renvoie une liste des figures actuelles dans pylab?
Websearch n'a pas aidé ...
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)
Pyplot a get_fignums méthode qui retourne une liste de chiffres. Cela devrait faire ce que vous voulez:
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)
Le one-liner suivant récupère la liste des figures existantes:
import matplotlib.pyplot as plt
figs = list(map(plt.figure, plt.get_fignums()))
Cela devrait vous aider (à partir du doc pylab.figure):
signature d'appel ::
figure (num = None, figsize = (8, 6), dpi = 80, facecolor = 'w', edgecolor = 'k')
Créez une nouvelle figure et retournez a: class:
matplotlib.figure.Figure
instance. Si num = Aucun , le chiffre nombre sera incrémenté et une nouvelle figure sera créée. ** Les objets de figure retournés ont un attribut nombre contenant ce nombre.
Si vous souhaitez rappeler vos figures dans une boucle, alors une bonne approche serait de stocker vos instances de figures dans une liste et de les appeler dans la boucle.
>> f = pylab.figure()
>> mylist.append(f)
etc...
>> for fig in mylist:
>> fig.savefig()
En supposant que vous n'avez pas spécifié manuellement num
dans aucun de vos constructeurs de figures (donc tous vos numéros de figures sont consécutifs) et toutes les figures que vous souhaitez enregistrer ont en fait des tracés sur eux ...
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
A l'effet secondaire de créer une nouvelle figure vierge, mais mieux si vous ne voulez pas compter sur une interface non prise en charge
J'ai tendance à nommer mes chiffres en utilisant des chaînes plutôt qu'en utilisant l'entier par défaut (et non descriptif). Voici un moyen de récupérer ce nom et d'enregistrer vos chiffres avec un nom de fichier descriptif:
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()))