Ответ 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")
Я попробовал следующий код (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
будет существовать и будет выглядеть так:
Как я могу решить проблему?
Удалите 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")
Предлагаемые решения несовместимы с 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
Как ранее предлагалось в других сообщениях в этой теме.
Некоторые из вышеперечисленных решений не помогли мне. Атрибут .fig
не был найден, когда я попробовал это, и я не смог напрямую использовать .savefig()
. Однако, какая работа была:
sns_plot.figure.savefig("output.png")
Я новый пользователь Python, поэтому я не знаю, связано ли это с обновлением. Я хотел упомянуть об этом, если кто-то другой столкнется с теми же проблемами, что и я.
Вы можете просто использовать метод savefig
sns_plot
напрямую.
sns_plot.savefig("output.png")
Для ясности кода, если вы хотите получить доступ к фигуре matplotlib, в которой находится sns_plot
, вы можете получить ее непосредственно с помощью
fig = sns_plot.fig
В этом случае нет метода get_figure
, который предполагает ваш код.
Я использую distplot
и get_figure
для успешного сохранения изображения.
sns_hist = sns.distplot(df_train['SalePrice'])
fig = sns_hist.get_figure()
fig.savefig('hist.png')
Вы получите сообщение об ошибке 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")
Также возможно просто создать объект 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
Это работает для меня
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')
Просто к вашему сведению, приведенная ниже команда работала в seaborn 0.8.1, поэтому я думаю, что первоначальный ответ все еще действителен.
sns_plot = sns.pairplot(data, hue='species', size=3)
sns_plot.savefig("output.png")