web-dev-qa-db-fra.com

Sauvegarde des tracés (AxesSubPlot) générés à partir de python pandas avec la sauvegarde de matplotlib

J'utilise pandas pour générer un tracé à partir d'un cadre de données, que je voudrais enregistrer dans un fichier:

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

Il semble que la dernière ligne, utilisant la sauvegarde de matplotlib, devrait faire l'affaire. Mais ce code produit l'erreur suivante:

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

Alternativement, essayer d'appeler savefig directement sur le graphe entraîne également une erreur:

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'

Je pense que je dois en quelque sorte ajouter la sous-parcelle renvoyée par plot () à une figure afin d'utiliser savefig. Je me demande également si cela a peut-être à voir avec magie derrière la classe AxesSubPlot.

MODIFIER:

les travaux suivants (ne soulevant aucune erreur), mais me laisse avec une image de page vierge ....

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

EDIT 2: Le code ci-dessous fonctionne aussi bien

dtf2.plot().get_figure().savefig('output.png')
49
bhoward

La méthode gcf est obsolète en V 0.14, le code ci-dessous fonctionne pour moi:

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

Donc, je ne suis pas tout à fait sûr de savoir pourquoi cela fonctionne, mais cela enregistre une image avec mon intrigue:

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

J'imagine que le dernier extrait de mon message d'origine a été sauvegardé en blanc, car la figure ne recevait jamais les axes générés par les pandas. Avec le code ci-dessus, l'objet figure est renvoyé d'un état global magique par l'appel de gcf () (obtenir le chiffre actuel), qui se met automatiquement dans les axes tracés dans la ligne ci-dessus.

13
bhoward

Il me semble facile d’utiliser la fonction plt.savefig() après la fonction plot():

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

cela peut être une approche plus simple:

(DesiredFigure) .get_figure (). Savefig ('figure_name.png')

c'est à dire.

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