Je travaille dans un environnement psudo-opérationnel où nous créons de nouvelles images à la réception des données. Parfois, lorsque de nouvelles données arrivent, nous devons rouvrir une image et la mettre à jour afin de créer des composites, d'ajouter des superpositions, etc. En plus de l'ajout à l'image, cela nécessite la modification des titres, des légendes, etc.
Est-ce que matplotlib contient quelque chose qui me permettrait de stocker et de recharger mon objet matplotlib.pyplot pour une utilisation ultérieure? Il faudrait maintenir l'accès à tous les objets associés, y compris les figures, les lignes, les légendes, etc. Peut-être que je recherche un cornichon, mais j'en doute.
À partir de la version 1.2, matplotlib est livré avec un support de décapage expérimental. Si vous rencontrez des problèmes, merci de nous le signaler sur la liste de diffusion de mpl ou en ouvrant un problème sur github.com/matplotlib/matplotlib
HTH
EDIT: Ajout d'un exemple simple
import matplotlib.pyplot as plt
import numpy as np
import pickle
ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
pickle.dump(ax, file('myplot.pickle', 'w'))
Puis dans une session séparée:
import matplotlib.pyplot as plt
import pickle
ax = pickle.load(file('myplot.pickle'))
plt.show()
Une petite modification à la réponse de Pelson pour les personnes travaillant sur un Jupyterhub
Utilisez %matplotlib notebook
avant de charger le cornichon. Utiliser %matplotlib inline
ne fonctionnait pas pour moi, ni dans jupyterhub, ni dans le bloc-notes jupyter. et donne une trace se terminant par AttributeError: l'objet 'module' n'a pas d'attribut 'new_figure_manager_given_figure'.
import matplotlib.pyplot as plt
import numpy as np
import pickle
%matplotlib notebook
ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
with open('myplot.pkl','wb') as fid:
pickle.dump(ax, fid)
Puis dans une session séparée:
import matplotlib.pyplot as plt
import pickle
%matplotlib notebook
with open('myplot.pkl','rb') as fid:
ax = pickle.load(fid)
plt.show()
J'ai produit des figures pour un certain nombre de documents en utilisant matplotlib. Plutôt que de penser à sauvegarder la figure (comme dans MATLAB), j’écrirais un script qui traçait les données puis formatait et sauvegardait la figure. Dans les cas où je voulais conserver une copie locale des données (surtout si je voulais pouvoir jouer à nouveau avec elles), j'ai trouvé numpy.savez () et numpy.load () to be très utile.
Au début, j’ai manqué la sensation enveloppée de conserver une figure dans MATLAB, mais après un certain temps, j’ai préféré préférer cette approche car elle inclut les données dans un format disponible pour une analyse plus approfondie.
Avez-vous essayé le module pickle? Il sérialise un objet, le vide dans un fichier et peut le recharger ultérieurement à partir du fichier.