2015-08-27 10 views
56

मैं निम्नलिखित कोड (test_seaborn.py) की कोशिश की:एक फ़ाइल में एक Seaborn साजिश को बचाने के लिए कैसे

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 मौजूद हैं और लगेगा

enter image description here

मैं टी का समाधान कैसे कर सकते हैं: इस तरह वह समस्या है?

उत्तर

47

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") 
+9

कृपया ध्यान दें कि इस Seaborn 0.7.1 में काम नहीं करता है (अन्य जवाब देखें)। – Guido

+3

** नोटिस ** कि यह उत्तर हालांकि स्वीकार किया गया पुराना है। सही जवाब है कि [यहाँ Salvatore द्वारा दिए गए।] है (http://stackoverflow.com/a/39482402/1391441) – Gabriel

10

आपको savefig विधि sns_plot का उपयोग करने में सक्षम होना चाहिए।

sns_plot.savefig("output.png") 

अपने कोड के साथ स्पष्टता के लिए आप matplotlib आंकड़ा है कि sns_plot में रहता है तक पहुँचने के लिए तो आप इसके

fig = sns_plot.fig 

इस मामले में साथ सीधे प्राप्त कर सकते हैं चाहता था, तो अपने कोड के रूप में कोई get_figure विधि है मान लिया गया है।

53

सुझाव दिया समाधान Seaborn 0.7.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.7.1):

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

रूप this answer में पहले से देखा।

अद्यतन: मैं हाल ही में एक साजिश this example से मिलता-जुलता उत्पन्न करने के लिए Seaborn से PairGrid वस्तु का इस्तेमाल किया है। इस मामले में, चूंकि ग्रिडप्लॉट प्लॉट ऑब्जेक्ट नहीं है, उदाहरण के लिए, sns.swarmplot, इसमें कोई get_figure() फ़ंक्शन नहीं है। यह सीधे द्वारा

fig = myGridPlotObject.fig 

matplotlib आंकड़ा तक पहुँचने के लिए की तरह पहले से इस सूत्र में अन्य पदों में सुझाव दिया जा सकता है।

+0

मैं समस्या का सामना जैसे आपने कहा था और इस विधि से काम करता है – sikisis

+1

मैं हाल ही में के रूप में Seaborn से PairGrid वस्तु का इस्तेमाल किया है उदाहरण –

11

उपर्युक्त समाधानों में से कुछ मेरे लिए काम नहीं करते थे। .fig विशेषता तब नहीं मिली जब मैंने कोशिश की और मैं सीधे .savefig() का उपयोग करने में असमर्थ था। हालांकि, क्या किया काम था:

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

मैं एक नए अजगर उपयोगकर्ता हूँ, इसलिए मैं अगर यह एक अद्यतन की वजह से है पता नहीं है। मैं इसका उल्लेख करना चाहता था अगर कोई और वही मुद्दों में चलता है जैसा मैंने किया था।

2

मैं distplot और get_figure का उपयोग चित्र सफलतापूर्वक को बचाने के लिए।

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

आप Seaborn 0.8.1 में sns.figure.savefig("output.png") प्रयोग करने के लिए एक त्रुटि मिलेगा।

इसके बजाय का उपयोग करें:

import seaborn as sns 

df = sns.load_dataset('iris') 
sns_plot = sns.pairplot(df, hue='species', size=2.5) 
sns_plot.savefig("output.png") 
संबंधित मुद्दे