2 votes

Sauvegarde de la figure python matplotlib en tant que pickle

Je souhaite sauvegarder les figures matplotlib sous forme de pickle, afin de permettre à mon équipe de les charger facilement et d'enquêter sur les événements anormaux. En utilisant un simple format d'image, on perd la possibilité de zoomer et d'étudier la figure. J'ai donc essayé d'enregistrer ma figure au format pickle :

fig, axarr = plt.subplots(2, sharex='all') # creating the figure
... # plotting things
...
pickle.dump(fig, open('myfigfile.p'), 'wb'))

Ensuite, je le charge. Ça a l'air bien. Au début.

fig = pickle.load(open('myfigfile.p', 'rb'))
plt.show()

Mais je vois que sharex ne fonctionne pas. Lorsque je zoome sur un sous-graphe, l'autre reste statique. Sur le graphe original, cela fonctionne très bien, et le zoom avant permet de zoomer sur les deux axes x, mais une fois que j'ai chargé la figure dans un pickle, cela ne fonctionne plus. Comment puis-je sauvegarder le tracé pour qu'il continue à partager l'axe x après le chargement ? Ou, comment puis-je rétablir share-x après avoir chargé la figure à partir du pickle ?

Merci de votre attention !

4voto

ImportanceOfBeingErnest Points 119438

Dans la version de développement actuelle de matplotlib, cela devrait fonctionner grâce à l'option correctif fourni .

Avec la version actuelle de matplotlib, il faudrait rétablir le partage, par exemple de la manière suivante

import matplotlib.pyplot as plt
import pickle

fig, axes = plt.subplots(ncols=3, sharey="row")
axes[0].plot([0,1],[0,1])
axes[1].plot([0,1],[1,2])
axes[2].plot([0,1],[2,3])

pickle.dump(fig, file('fig1.pkl', 'wb'))  

plt.close("all")

fig2 = pickle.load(file('fig1.pkl','rb'))
ax_master = fig2.axes[0]
for ax in fig2.axes:
    if ax is not ax_master:
        ax_master.get_shared_y_axes().join(ax_master, ax)

plt.show()

L'inconvénient est qu'il faut savoir quels axes partager. Dans le cas où tous les axes sont partagés, c'est bien sûr facile, comme indiqué ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X