140 votes

Enregistrer des tracés (AxesSubPlot) générés à partir de Python pandas avec la fonction savefig de matplotlib

Je suis en train d'utiliser pandas pour générer un graphique à partir d'une dataframe, 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, en utilisant savefig de matplotlib, devrait faire l'affaire. Mais ce code produit l'erreur suivante :

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

Alternativement, essayer d'appeler savefig directement sur le plot produit également une erreur :

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'

Je pense que je dois d'une manière ou d'une autre ajouter le subplot retourné par plot() à une figure afin d'utiliser savefig. Je me demande également si cela a peut-être à voir avec le magic derrière la classe AxesSubPlot.

EDIT:

le code suivant fonctionne (sans erreur), mais me laisse avec une image de page blanche....

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

EDIT 2: Le code ci-dessous fonctionne également très bien

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

4voto

vamsi chinta Points 41

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X