Подтвердить что ты не робот

Сохранение графиков (AxesSubPlot), сгенерированных из python pandas с помощью matplotlib savefig

Я использую панды для создания графика из кадра данных, который я хотел бы сохранить в файл:

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

Похоже, что последняя строка, использующая matplotlib savefig, должна сработать. Но этот код выдает следующую ошибку:

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

Кроме того, попытка вызвать savefig непосредственно на графике также приводит к ошибкам:

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'

Я думаю, что мне нужно как-то добавить подплот, возвращенный plot() к рисунку, чтобы использовать savefig. Мне также интересно, может быть, это связано с магией класса AxesSubPlot.

РЕДАКТИРОВАТЬ:

следующие работы (повышение без ошибок), но оставляет меня с изображением пустой страницы....

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

РЕДАКТИРОВАТЬ 2: приведенный ниже код работает хорошо

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

Ответ 1

Метод gcf лишен в V 0.14, ниже код работает для меня:

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

Ответ 2

Итак, я не совсем уверен, почему это работает, но оно сохраняет изображение с моим сюжетом:

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

Я предполагаю, что последний фрагмент из моего исходного сообщения был сохранен пустым, потому что фигура никогда не получала оси, созданные с помощью pandas. С приведенным выше кодом объект фигуры возвращается из какого-либо магического глобального состояния по вызову gcf() (получить текущий рисунок), который автоматически выпекает в осях, построенных в строке выше.

Ответ 3

Мне кажется, что легко использовать plt.savefig() после функции plot():

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

Ответ 4

это может быть более простой подход:

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

т.е.

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