web-dev-qa-db-fra.com

Stocker et recharger l'objet matplotlib.pyplot

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. 

39
Vorticity

À 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()
48
pelson

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()
9
Ben Bowen

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.

2
Tim D

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.

0
Andrew