Matplotlib ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस का उपयोग करके सीबॉर्न के साथ प्लॉटिंग


103

मैं दृढ़ता से matplotlibOOP शैली में उपयोग करना पसंद करता हूं :

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

इससे कई आंकड़े और सबप्लॉट का ट्रैक रखना आसान हो जाता है।

प्रश्न: इस तरह से सीबॉर्न का उपयोग कैसे करें? या, इस उदाहरण को OOP शैली में कैसे बदला जाए ? seabornप्लॉटिंग फंक्शंस को कैसे बताएं कि यह lmplotकिस तरह का है Figureया Axesयह प्लॉट करता है।


1
संबंधित: यह समस्या और संभव वर्कअराउंड के लिए यह उत्तर , जो एक जलजनित आकृति बनाने की अनुमति देगा और बाद में सभी अक्षों को एक सबप्लॉट ग्रिड में स्थानांतरित करेगा।
ImportanceOfBeingErnest

जवाबों:


229

यह थोड़ा निर्भर करता है कि आप किस समुद्री कार्य का उपयोग कर रहे हैं।

सीबॉर्न में प्लॉटिंग फ़ंक्शन मोटे तौर पर दो वर्गों में विभाजित हैं

  • "अक्ष स्तर के" काम करता है, सहित regplot, boxplot, kdeplot, और कई अन्य
  • "चित्रा-स्तरीय" काम करता है, सहित lmplot, factorplot, jointplotऔर एक या दो अन्य

पहले समूह को एक स्पष्ट axतर्क देकर और किसी Axesवस्तु को वापस करके पहचाना जाता है । जैसा कि यह पता चलता है, आप उन्हें "ऑब्जेक्ट ओरिएंटेड" स्टाइल में अपने पास पास करके उपयोग कर सकते Axesहैं:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

एक्सिस-स्तरीय फ़ंक्शंस केवल एक पर आकर्षित Axesहोंगे और अन्यथा आंकड़ा के साथ गड़बड़ नहीं करेंगे, इसलिए वे ऑब्जेक्ट-ओरिएंटेड मैटलोट्लिब स्क्रिप्ट में पूरी तरह से खुशी से सहवास कर सकते हैं।

कार्यों के दूसरे समूह (चित्रा-स्तर) को इस तथ्य से प्रतिष्ठित किया जाता है कि परिणामस्वरूप प्लॉट संभावित रूप से कई एक्सिस को शामिल कर सकते हैं जो हमेशा "सार्थक" तरीके से आयोजित किए जाते हैं। इसका मतलब है कि कार्यों को आंकड़े पर कुल नियंत्रण रखने की आवश्यकता है, इसलिए यह lmplotपहले से मौजूद है , यह कहना, साजिश करना संभव नहीं है। फ़ंक्शन को कॉल करना हमेशा एक आकृति को इनिशियलाइज़ करता है और इसे उस विशिष्ट प्लॉट के लिए सेट करता है जिसे यह ड्राइंग कर रहा है।

हालाँकि, एक बार कॉल करने के बाद lmplot, यह टाइप का एक ऑब्जेक्ट लौटाएगा FacetGrid। इस ऑब्जेक्ट के परिणामस्वरूप प्लॉट पर काम करने के कुछ तरीके हैं जो प्लॉट की संरचना के बारे में थोड़ा जानते हैं। यह भी तर्क FacetGrid.figऔर FacetGrid.axesतर्क में कुल्हाड़ियों की अंतर्निहित आकृति और सरणी को उजागर करता है। jointplotसमारोह बहुत समान है, लेकिन यह एक का उपयोग करता है JointGridवस्तु। तो आप अभी भी इन कार्यों को ऑब्जेक्ट-ओरिएंटेड संदर्भ में उपयोग कर सकते हैं, लेकिन आपके द्वारा किए गए फ़ंक्शन को कॉल करने के बाद आपके सभी अनुकूलन आने होंगे।


यह वास्तव में मददगार था। यहाँ मेरे जवाब पर एक नज़र डालें: stackoverflow.com/questions/27019079/…
denson
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.