Guardando gráficos (AxesSubPlot) generados a partir de pandas python con la función savefig de matplotlib

Estoy usando pandas para generar un gráfico a partir de un dataframe, que me gustaría guardar en un archivo:

dtf = pd.DataFrame.from_records(d,columns=h) fig = plt.figure() ax = dtf2.plot() ax = fig.add_subplot(ax) fig.savefig('~/Documents/output.png') 

Parece que la última línea, usando la salvaguarda de matplotlib, debería hacer el truco. Pero ese código produce el siguiente error:

 Traceback (most recent call last): File "./testgraph.py", line 76, in  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 

Alternativamente, intentar llamar a savefig directamente en la ttwig también produce errores:

 dtf2.plot().savefig('~/Documents/output.png') File "./testgraph.py", line 79, in  dtf2.plot().savefig('~/Documents/output.png') AttributeError: 'AxesSubplot' object has no attribute 'savefig' 

Creo que necesito agregar de alguna manera la ttwig secundaria devuelta por plot () a una figura para poder usar savefig. También me pregunto si quizás esto tenga que ver con la magia detrás de la clase AxesSubPlot.

EDITAR:

Lo siguiente funciona (no genera ningún error), pero me deja con una imagen de página en blanco …

 fig = plt.figure() dtf2.plot() fig.savefig('output.png') 

El método gcf se redujo en V 0.14, el siguiente código funciona para mí:

 plot = dtf.plot() fig = plot.get_figure() fig.savefig("output.png") 

Así que no estoy completamente seguro de por qué funciona esto, pero guarda una imagen con mi ttwig:

 dtf = pd.DataFrame.from_records(d,columns=h) dtf2.plot() fig = plt.gcf() fig.savefig('output.png') 

Supongo que el último fragmento de mi publicación original se guardó en blanco porque la figura nunca obtuvo los ejes generados por los pandas. Con el código anterior, el objeto figura se devuelve de algún estado global mágico mediante la llamada gcf () (obtener la figura actual), que se hornea automáticamente en los ejes trazados en la línea superior.

Me parece fácil usar la función plt.savefig() después de la función plot() :

 import matplotlib.pyplot as plt dtf = pd.DataFrame.from_records(d,columns=h) dtf.plot() plt.savefig('~/Documents/output.png') 

Esto puede ser un enfoque más simple:

(DesiredFigure) .get_figure (). Savefig (‘figure_name.png’)

es decir

 dfcorr.hist(bins=50).get_figure().savefig('correlation_histogram.png')