112 votes

Enregistrer un tracé d'histogramme de pandas.Series dans un fichier

Dans le carnet de notes ipython, créez d'abord un objet de la série pandas, puis en appelant la méthode d'instance .hist(), le navigateur affiche la figure.

Je me demande comment enregistrer cette figure dans un fichier (je veux dire pas en faisant un clic droit et enregistrer sous, mais avec les commandes nécessaires dans le script).

234voto

Phillip Cloud Points 6685

Utilisez la méthode Figure.savefig(), comme ceci :

ax = s.hist()  # s est une instance de Series
fig = ax.get_figure()
fig.savefig('/chemin/vers/figure.pdf')

Il n'est pas nécessaire que cela se termine par pdf, il existe de nombreuses options. Consultez la documentation.

Alternativement, vous pouvez utiliser l'interface pyplot et simplement appeler la fonction savefig pour enregistrer la figure la plus récemment créée :

import matplotlib.pyplot as plt
s.hist()
plt.savefig('chemin/vers/figure.pdf')  # sauvegarde la figure actuelle

Tracés à partir de plusieurs colonnes

  • Ajouté à partir d'un commentaire de toto_tico fait le 2018-05-11
  • Si vous obtenez cette erreur AttributeError: 'numpy.ndarray' object has no attribute 'get_figure', il est probable que vous traitez des colonnes multiples.

    • Dans ce cas, ax sera un tableau de tous les axes.

    ax = s.hist(columns=['colA', 'colB'])

    essayez une des options suivantes

    fig = ax[0].get_figure() fig = ax[0][0].get_figure()

    fig.savefig('figure.pdf')

16voto

joelostblom Points 7189

Vous pouvez utiliser ax.figure.savefig() :

import pandas as pd

s = pd.Series([0, 1])
ax = s.plot.hist()
ax.figure.savefig('demo-file.pdf')

Cela n'a aucun avantage pratique par rapport à ax.get_figure().savefig() comme suggéré dans la réponse de Philip Cloud, donc vous pouvez choisir l'option que vous trouvez la plus esthétique. En fait, get_figure() retourne simplement self.figure :

# Source from snippet linked above
def get_figure(self):
    """Return the `.Figure` instance the artist belongs to."""
    return self.figure

10voto

Mikkel Points 155

Vous pouvez simplement enregistrer votre tracé (par exemple l'histogramme) de cette manière :

df.plot.hist().get_figure().savefig('nom')

4voto

larapsodia Points 69

Je voulais juste ajouter que la résolution par défaut est de 100dpi, ce qui est correct pour l'écran mais ne fonctionnera pas si vous souhaitez agrandir ou imprimer. Vous pouvez passer un paramètre 'dpi' pour obtenir un fichier haute résolution :

ax = s.hist()  # s est une instance de Series
ax.figure.savefig('/chemin/vers/figure.png', dpi=300)

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