zapisz pandas.Series histogram plot do pliku

85

W ipython Notebook najpierw utwórz obiekt serii pandy, a następnie wywołując metodę instancji .hist (), przeglądarka wyświetli figurę.

Zastanawiam się jak zapisać tę figurę do pliku (mam na myśli nie kliknięcie prawym przyciskiem i zapisanie jako, ale polecenia potrzebne w skrypcie).

GeauxEric
źródło

Odpowiedzi:

173

Skorzystaj z takiej Figure.savefig()metody:

ax = s.hist()  # s is an instance of Series
fig = ax.get_figure()
fig.savefig('/path/to/figure.pdf')

To nie musi się kończyć pdf, jest wiele opcji. Sprawdź dokumentację .

Alternatywnie możesz użyć pyplotinterfejsu i po prostu wywołać funkcję savefigjako, aby zapisać ostatnio utworzoną figurę:

import matplotlib.pyplot as plt
s.hist()
plt.savefig('path/to/figure.pdf')  # saves the current figure
Phillip Cloud
źródło
7
jeśli otrzymujesz ten błąd AttributeError: 'numpy.ndarray' object has no attribute 'get_figure', prawdopodobnie rysujesz wiele kolumn, np s.hist(columns=['colA', 'colB']). W tym przypadku axbędzie tablicą wszystkich osi. Możesz spróbować ax[0].get_figure()lubax[0][0].get_figure()
toto_tico
1
Kilkakrotnie oszczędzam dwie działki. Ale nadpisuje pierwszy wykres, a drugi wygląda jak suma dwóch wykresów. Czy ktoś wie, jak rozwiązać ten problem?
Capan
1
@bukowski Dodaj import matplotlib.pyplot as plti plt.close().
Acumenus
Jeśli ktoś robi pętlę i wiele figur, można zrobić, fig.clf()aby wyczyścić figurę.
tommy.carstensen
7

Możesz użyć ax.figure.savefig():

import pandas as pd

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

Nie ma to praktycznej korzyści w porównaniu z ax.get_figure().savefig()sugestią Philipa Clouda, więc możesz wybrać opcję, którą uważasz za najbardziej estetyczną. W rzeczywistości get_figure()po prostu zwracaself.figure :

# Source from snippet linked above
def get_figure(self):
    """Return the `.Figure` instance the artist belongs to."""
    return self.figure
joelostblom
źródło