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

Как сохранить заговор Seaborn в файл

Я попробовал следующий код (test_seaborn.py):

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set()
df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
fig = sns_plot.get_figure()
fig.savefig("output.png")
#sns.plt.show()

Но я получаю эту ошибку:

  Traceback (most recent call last):
  File "test_searborn.py", line 11, in <module>
    fig = sns_plot.get_figure()
AttributeError: 'PairGrid' object has no attribute 'get_figure'

Я ожидаю, что окончательный output.png будет существовать и будет выглядеть так:

введите описание изображения здесь

Как я могу решить проблему?

4b9b3361

Ответ 1

Удалите get_figure и просто используйте sns_plot.savefig('output.png')

df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
sns_plot.savefig("output.png")

Ответ 2

Предлагаемые решения несовместимы с Seaborn 0.8.1.

выдает следующие ошибки, потому что интерфейс Seaborn изменился:

AttributeError: 'AxesSubplot' object has no attribute 'fig'
When trying to access the figure

AttributeError: 'AxesSubplot' object has no attribute 'savefig'
when trying to use the savefig directly as a function

Следующие вызовы позволяют получить доступ к рисунку (совместим с Seaborn 0.8.1):

swarm_plot = sns.swarmplot(...)
fig = swarm_plot.get_figure()
fig.savefig(...) 

как видно ранее в этом ответе.

ОБНОВЛЕНИЕ: я недавно использовал объект PairGrid из seaborn для создания графика, похожего на тот, что в этом примере. В этом случае, поскольку GridPlot не является объектом графика, как, например, sns.swarmplot, у него нет функции get_figure(). Прямой доступ к фигуре matplotlib можно получить

fig = myGridPlotObject.fig

Как ранее предлагалось в других сообщениях в этой теме.

Ответ 3

Некоторые из вышеперечисленных решений не помогли мне. Атрибут .fig не был найден, когда я попробовал это, и я не смог напрямую использовать .savefig(). Однако, какая работа была:

sns_plot.figure.savefig("output.png")

Я новый пользователь Python, поэтому я не знаю, связано ли это с обновлением. Я хотел упомянуть об этом, если кто-то другой столкнется с теми же проблемами, что и я.

Ответ 4

Вы можете просто использовать метод savefig sns_plot напрямую.

sns_plot.savefig("output.png")

Для ясности кода, если вы хотите получить доступ к фигуре matplotlib, в которой находится sns_plot, вы можете получить ее непосредственно с помощью

fig = sns_plot.fig

В этом случае нет метода get_figure, который предполагает ваш код.

Ответ 5

Я использую distplot и get_figure для успешного сохранения изображения.

sns_hist = sns.distplot(df_train['SalePrice'])
fig = sns_hist.get_figure()
fig.savefig('hist.png')

Ответ 6

Вы получите сообщение об ошибке sns.figure.savefig("output.png") в seaborn 0.8.1.

Вместо этого используйте:

import seaborn as sns

df = sns.load_dataset('iris')
sns_plot = sns.pairplot(df, hue='species', size=2.5)
sns_plot.savefig("output.png")

Ответ 7

Также возможно просто создать объект figure matplotlib и затем использовать plt.savefig(...):

from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

df = sns.load_dataset('iris')
plt.figure() # Push new figure on stack
sns_plot = sns.pairplot(df, hue='species', size=2.5)
plt.savefig("output.png") # Save that figure

Ответ 8

Это работает для меня

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

sns.factorplot(x='holiday',data=data,kind='count',size=5,aspect=1)
plt.savefig('holiday-vs-count.png')

Ответ 9

Просто к вашему сведению, приведенная ниже команда работала в seaborn 0.8.1, поэтому я думаю, что первоначальный ответ все еще действителен.

sns_plot = sns.pairplot(data, hue='species', size=3)
sns_plot.savefig("output.png")