it-swarm.com.de

Speichern und erneutes Laden des matplotlib.pyplot-Objekts

Ich arbeite in einer psudo-operativen Umgebung, in der wir nach Erhalt der Daten neue Bilder machen. Wenn neue Daten eingehen, müssen wir manchmal ein Bild erneut öffnen und dieses Bild aktualisieren, um Verbundwerkzeuge zu erstellen, Überlagerungen hinzuzufügen. 

Gibt es in matplotlib etwas eingebautes, mit dem ich mein matplotlib.pyplot-Objekt zur späteren Verwendung speichern und erneut laden kann? Es müsste den Zugriff auf alle zugehörigen Objekte, einschließlich Figuren, Linien, Legenden usw., aufrechterhalten. Vielleicht habe ich nach Gurke gesucht, aber ich bezweifle es. 

39
Vorticity

Ab 1.2 wird matplotlib mit experimenteller Beizunterstützung ausgeliefert. Wenn Sie auf Probleme stoßen, teilen Sie uns dies bitte der mpl-Mailingliste mit oder öffnen Sie eine Ausgabe unter github.com/matplotlib/matplotlib

HTH

EDIT: Ein einfaches Beispiel hinzugefügt

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

Dann in einer separaten Sitzung:

import matplotlib.pyplot as plt
import pickle

ax = pickle.load(file('myplot.pickle'))
plt.show()
48
pelson

Eine kleine Modifikation zu Pelsons Antwort für Leute, die an einem Jupyterhub arbeiten

Verwenden Sie %matplotlib notebook, bevor Sie die Gurke laden. Die Verwendung von %matplotlib inline hat für mich weder im Jupyterhub- noch im Jupyter-Notebook funktioniert. und gibt ein Traceback an, das auf .__ endet. AttributeError: Das 'module'-Objekt hat kein 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)

Dann in einer separaten Sitzung:

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

Ich habe mit Matplotlib Zahlen für mehrere Papiere erstellt. Anstatt an das Speichern der Figur (wie in MATLAB) zu denken, würde ich ein Skript schreiben, das die Daten plottet und dann formatiert und die Figur speichert. In den Fällen, in denen ich eine lokale Kopie der Daten behalten wollte (insbesondere wenn ich noch einmal damit spielen wollte), fand ich numpy.savez () und numpy.load () sehr hilfreich.

Zuerst habe ich das Gefühl, in MATLAB eine Figur zu speichern, vermisst, aber nach einiger Zeit bevorzuge ich diesen Ansatz, weil er die Daten in einem Format enthält, das für die weitere Analyse verfügbar ist.

2
Tim D

Haben Sie das Pickle-Modul ausprobiert? Es serialisiert ein Objekt, speichert es in einer Datei und kann es später aus der Datei erneut laden.

0
Andrew