сохранить график гистограммы pandas.Series в файл

85

В ipython Notebook сначала создайте объект серии pandas, затем, вызвав метод экземпляра .hist (), браузер отобразит рисунок.

Мне интересно, как сохранить этот рисунок в файл (я имею в виду не щелчок правой кнопкой мыши и сохранение как, а команды, необходимые в сценарии).

GeauxEric
источник

Ответы:

173

Используйте Figure.savefig()метод, например:

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

Необязательно заканчиваться pdf, есть много вариантов. Ознакомьтесь с документацией .

Кроме того, вы можете использовать pyplotинтерфейс и просто вызвать savefigфункцию как функцию для сохранения последней созданной фигуры:

import matplotlib.pyplot as plt
s.hist()
plt.savefig('path/to/figure.pdf')  # saves the current figure
Филипп Клауд
источник
7
если вы получаете эту ошибку AttributeError: 'numpy.ndarray' object has no attribute 'get_figure', вероятно, вы строите несколько столбцов, например s.hist(columns=['colA', 'colB']). В этом случае axэто будет массив всех осей. Можете попробовать ax[0].get_figure()илиax[0][0].get_figure()
toto_tico
1
Два участка коплю повторно. Но он перезаписывает первый сюжет, а второй выглядит как сумма двух сюжетов. Кто-нибудь знает, как решить эту проблему?
Capan
1
@bukowski Добавить import matplotlib.pyplot as pltи plt.close().
Acumenus
Если вы делаете цикл и несколько фигур, то можно сделать fig.clf()очистку фигуры.
tommy.carstensen
7

Вы можете использовать ax.figure.savefig():

import pandas as pd

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

Это не имеет практической пользы по сравнению с тем, ax.get_figure().savefig()что предлагается в ответе Филипа Клауда, поэтому вы можете выбрать вариант, который вам наиболее эстетичен. Фактически get_figure()просто возвращаетself.figure :

# Source from snippet linked above
def get_figure(self):
    """Return the `.Figure` instance the artist belongs to."""
    return self.figure
Joelostblom
источник