सीबॉर्न प्लॉट को फाइल में कैसे सेव करें


172

मैंने निम्नलिखित कोड की कोशिश की ( 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मौजूद होगा और इस तरह दिखेगा:

यहां छवि विवरण दर्ज करें

मैं समस्या का समाधान कैसे कर सकता हूं?


1
@ टेरी वैंग का जवाब नीचे मेरे लिए काम किया - Python 2.7.12औरseaborn 0.7.1
क्रिस्टियन ई। नूनो

1
एक लाइनर के लिए seaborn 0.9:sns.regplot(x='age', y='income', data=pd.read_csv('income_data.csv')).get_figure().savefig('income_f_age.png')
एंटोन तारासेंको

जवाबों:


130

निकालें 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")

38
कृपया ध्यान दें कि यह सीबोर्न 0.7.1 में काम नहीं करता है (अन्य उत्तर देखें)।
गुइडो

31
ध्यान दें कि यह उत्तर यद्यपि स्वीकृत है, पुराना है। सही उत्तर यह है कि सल्वाटोर ने यहां दिया है।
गेब्रियल

1
2020 में त्रुटि:AttributeError: 'AxesSubplot' object has no attribute 'savefig'
Nyxynyx

236

सुझाए गए समाधान सीबोर्न 0.8.1 के साथ असंगत हैं

निम्नलिखित त्रुटियाँ दे रहा है क्योंकि सीबोर्न इंटरफ़ेस बदल गया है:

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

निम्नलिखित कॉल आपको आंकड़ा (सीबॉर्न 0.8.1 संगत) तक पहुंचने की अनुमति देते हैं:

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

जैसा कि पहले इस उत्तर में देखा गया था ।

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

fig = myGridPlotObject.fig

पहले की तरह इस धागे में अन्य पदों पर सुझाव दिया।


2
मैंने हाल ही में समुद्री जीवों से पेयरग्रिड ऑब्जेक्ट का उपयोग किया है, उदाहरण के लिए
सल्वाटोर

2
यह एकमात्र उत्तर है जो पेयरग्रिड और जॉइंटग्रिड के लिए भी काम करता है, मुझे लगता है कि इसे स्वीकार किया जाना चाहिए।
रिसजार्ड सेटनार्स्की

41

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

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

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


1
यह मेरे लिए एक के साथ काम करता है seaborn.swarmplot, लेकिन इसके लिए seaborn.lmplotकाम नहीं करेगा। के साथ seaborn.lmplot, मैंने पाया sns_plot.savefig("output.png")कि सल्वातोर के उत्तर में काम किया, लेकिन get_figure()कॉल की आवश्यकता के बिना ।
वेन

14

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

sns_plot.savefig("output.png")

अपने कोड के साथ स्पष्टता के लिए यदि आप उस matplotlib आकृति का उपयोग करना चाहते हैं sns_plotजो तब रहती है तो आप इसे सीधे प्राप्त कर सकते हैं

fig = sns_plot.fig

इस मामले में कोई get_figureविधि नहीं है क्योंकि आपका कोड मानता है।


9

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

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

समारोह: मेरे पर्यावरण के लिए काम किया sns.distplot()में python 3.5.6साथ seaborn 0.9.0। इसके अलावा, समारोह sns.pairplot()की लाइन की जरूरत नहीं हैget_figure()
स्कॉट यांग

9

2019 खोजकर्ताओं के लिए कम लाइनें:

import matplotlib.pyplot as plt
import seaborn as sns

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

अद्यतन नोट: sizeको बदल दिया गया था height


3

यह मेरे लिए काम करता है

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')

3

यह भी सिर्फ एक matplotlib figureवस्तु बनाने और फिर उपयोग करने के लिए संभव है 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

1

आपको sns.figure.savefig("output.png")सीबॉर्न 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")

-4

सिर्फ FYI करें, नीचे दिए गए कमांड ने सीबोर्न 0.8.1 में काम किया है इसलिए मुझे लगता है कि प्रारंभिक उत्तर अभी भी मान्य है।

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

हालांकि वह कोड काम कर रहा है, लेकिन यह पूरा नहीं है। शीर्षक कहता है, 'सीबॉर्न प्लॉट को एक फ़ाइल में कैसे सहेजा जाए' जो अधिक सामान्य है। अनजाने में प्रस्तावित समाधान युग्मक के साथ काम करता है, लेकिन यह भूखंडों के अन्य 'प्रकार' के साथ एक अपवाद को जन्म देता है। उम्मीद है कि भविष्य के रिलीज में सीबो प्लाट से 'फिगर' ऑब्जेक्ट प्राप्त करने का एक और एकीकृत तरीका होगा।
साल्वातोर कोसेंटिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.