Ich verwende Pandas, um aus einem Datenrahmen einen Plot zu generieren, den ich in einer Datei speichern möchte:
dtf = pd.DataFrame.from_records(d,columns=h)
fig = plt.figure()
ax = dtf2.plot()
ax = fig.add_subplot(ax)
fig.savefig('~/Documents/output.png')
Es scheint, als sollte die letzte Zeile mit matplotlibs savefig den Trick machen. Dieser Code erzeugt jedoch den folgenden Fehler:
Traceback (most recent call last):
File "./testgraph.py", line 76, in <module>
ax = fig.add_subplot(ax)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 890, in add_subplot
assert(a.get_figure() is self)
AssertionError
Alternativ kann der Versuch, savefig direkt im Plot aufzurufen, auch folgende Fehler verursachen:
dtf2.plot().savefig('~/Documents/output.png')
File "./testgraph.py", line 79, in <module>
dtf2.plot().savefig('~/Documents/output.png')
AttributeError: 'AxesSubplot' object has no attribute 'savefig'
Ich denke, ich muss irgendwie die von plot () zurückgegebene Nebenhandlung zu einer Figur hinzufügen, um savefig zu verwenden. Ich frage mich auch, ob dies vielleicht mit der Magie hinter der AxesSubPlot-Klasse zu tun hat .
BEARBEITEN:
Das Folgende funktioniert (ohne Fehler), hinterlässt aber ein leeres Seitenbild ....
fig = plt.figure()
dtf2.plot()
fig.savefig('output.png')
EDIT 2: Der folgende Code funktioniert auch gut
dtf2.plot().get_figure().savefig('output.png')
python
matplotlib
pandas
bhoward
quelle
quelle
ax.figure.savefig(...)
savefig()
Methode direkt für dasAxesSubplot
Objekt (wie direkt darauf und nicht einmal für die ihm zugewiesene Variable) die einzige Möglichkeit ist, wie sie für mich funktionieren kann. Ich bin wirklich verwirrt, warum dies der Fall ist. Hast du irgendeine Idee? Ist es eine Art Fehler?Antworten:
Die gcf-Methode ist in V 0.14 entzogen. Der folgende Code funktioniert für mich:
plot = dtf.plot() fig = plot.get_figure() fig.savefig("output.png")
quelle
AttributeError Traceback (most recent call last) /home/kohaugustine/INTERNSHIPS/UIUC_ADSC/adsc-hardware/sochls/vast_work/llvm/tools/shang/util/sit/sit/data_analysis.py in <module>() 295 cycles_plot.set_ylabel('Simulation Cycle Count') 296 --> 297 cycles_plot_file = cycles_plot.getfigure() 298 cycles_plot_file.savefig('cycles.pdf') 299 #cycles_series.show() AttributeError: 'AxesSubplot' object has no attribute 'getfigure'
_
- dhget_figure
nichtgetfigure
!Ich bin mir also nicht ganz sicher, warum dies funktioniert, aber es speichert ein Bild mit meiner Handlung:
dtf = pd.DataFrame.from_records(d,columns=h) dtf2.plot() fig = plt.gcf() fig.savefig('output.png')
Ich vermute, dass der letzte Ausschnitt aus meinem ursprünglichen Beitrag leer gespeichert wurde, weil die Figur nie die von Pandas erzeugten Achsen bekommen hat. Mit dem obigen Code wird das Figurenobjekt durch den Aufruf gcf () (aktuelle Figur abrufen) aus einem magischen globalen Zustand zurückgegeben, der automatisch in Achsen backt, die in der obigen Zeile dargestellt sind.
quelle
Es scheint mir einfach,
plt.savefig()
Funktion fürplot()
Funktion zu verwenden:import matplotlib.pyplot as plt dtf = pd.DataFrame.from_records(d,columns=h) dtf.plot() plt.savefig('~/Documents/output.png')
quelle
Sie können
ax.figure.savefig()
wie in einem Kommentar zur Frage vorgeschlagen Folgendes verwenden:import pandas as pd df = pd.DataFrame([0, 1]) ax = df.plot.line() ax.figure.savefig('demo-file.pdf')
Dies hat keinen praktischen Vorteil gegenüber
ax.get_figure().savefig()
den in anderen Antworten vorgeschlagenen, sodass Sie die Option auswählen können, die Sie am ästhetischsten finden. In der Tatget_figure()
einfach zurückself.figure
:# Source from snippet linked above def get_figure(self): """Return the `.Figure` instance the artist belongs to.""" return self.figure
quelle
Dies kann ein einfacherer Ansatz sein:
dh
dfcorr.hist(bins=50).get_figure().savefig('correlation_histogram.png')
quelle