Eu tentei o seguinte código ( 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()
Mas eu recebo este erro:
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'
Espero que a final output.png
exista e fique assim:
Como posso resolver o problema?
python
pandas
matplotlib
seaborn
neversaint
fonte
fonte
Python 2.7.12
eseaborn 0.7.1
seaborn 0.9
:sns.regplot(x='age', y='income', data=pd.read_csv('income_data.csv')).get_figure().savefig('income_f_age.png')
Respostas:
Remova o
get_figure
e apenas usesns_plot.savefig('output.png')
fonte
AttributeError: 'AxesSubplot' object has no attribute 'savefig'
As soluções sugeridas são incompatíveis com Seaborn 0.8.1
dando os seguintes erros porque a interface Seaborn mudou:
As chamadas a seguir permitem acessar a figura (compatível com Seaborn 0.8.1):
como visto anteriormente em nesta resposta .
UPDATE: Recentemente, usei o objeto PairGrid de seaborn para gerar um gráfico semelhante ao deste exemplo . Nesse caso, como o GridPlot não é um objeto de plotagem como, por exemplo, sns.swarmplot, ele não possui a função get_figure (). É possível acessar diretamente a figura do matplotlib
Como sugerido anteriormente em outros posts deste tópico.
fonte
Algumas das soluções acima não funcionaram para mim. O
.fig
atributo não foi encontrado quando tentei e não consegui usá-lo.savefig()
diretamente. No entanto, o que funcionou foi:Eu sou um usuário Python mais novo, então não sei se isso se deve a uma atualização. Eu queria mencionar isso no caso de alguém encontrar os mesmos problemas que eu.
fonte
seaborn.swarmplot
, mas paraseaborn.lmplot
isso não vai funcionar. Comseaborn.lmplot
, descobri quesns_plot.savefig("output.png")
funcionava como na resposta de Salvatore, mas sem necessidade deget_figure()
ligação.Você deve conseguir usar o
savefig
métodosns_plot
diretamente.Para maior clareza do seu código, se você deseja acessar a figura matplotlib que
sns_plot
reside, é possível obtê-la diretamente comNesse caso, não há
get_figure
método como o seu código assume.fonte
Eu uso
distplot
eget_figure
para salvar a foto com sucesso.fonte
sns.distplot()
empython 3.5.6
comseaborn 0.9.0
. Além disso, a funçãosns.pairplot()
não precisa da linha deget_figure()
Menos linhas para os pesquisadores de 2019:
ATUALIZAÇÃO NOTA:
size
foi alterada paraheight
.fonte
Isso funciona para mim
fonte
Também é possível apenas criar um
figure
objeto matplotlib e depois usarplt.savefig(...)
:fonte
Você receberia um erro ao usar
sns.figure.savefig("output.png")
no seaborn 0.8.1.Em vez disso, use:
fonte
Apenas para sua informação, o comando abaixo funcionou no seaborn 0.8.1, então acho que a resposta inicial ainda é válida.
fonte