2014-09-06 11 views
7

का उपयोग कर प्लॉटिंग टाइम सीरीज़ मेरे पास एक सरल पूर्णांक अनुक्रमणिका और 5 कॉलम के साथ एक डेटाफ्रेम (data) है। कॉलम Date, Country, AgeGroup, Gender, Stat हैं। (निर्दोषों की रक्षा के लिए नाम बदल दिए गए हैं।) मैं FacetGrid का उत्पादन करना चाहता हूं जहां Country पंक्ति को परिभाषित करता है, AgeGroup कॉलम को परिभाषित करता है, और Gender रंग को परिभाषित करता है। उन सभी विवरणों के लिए, मैं एक समय श्रृंखला ग्राफ का उत्पादन करना चाहता हूं। अर्थात। मुझे ग्राफों की एक सरणी मिलनी चाहिए जिनमें से प्रत्येक में 2 बार श्रृंखला है (1 पुरुष, 1 मादा)। मैं के साथ बहुत करीब प्राप्त कर सकते हैं:Seaborn FacetGrid

g = sns.FacetGrid(data, row='Country', col='AgeGroup', hue='Gender') 
g.map(plt.plot, 'Stat') 

हालांकि इस बस मुझे नमूना बजाय दिनांकों x- अक्ष पर संख्या देता है। क्या इस संदर्भ में कोई त्वरित सुधार है।

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

+0

जब आप कहते हैं कि "यह मुझे तारीखों के बजाय एक्स-अक्ष पर नमूना संख्या देता है", यह स्पष्ट नहीं है कि तिथियां कहां से आ रही हैं। क्या यह आपके डेटाफ्रेम में एक अलग कॉलम है? – mwaskom

+0

हां, ऊपर देखें, 'दिनांक' नामक एक कॉलम है और मैं इसका अर्थ सार्थक एक्स-अक्ष टिक्स उत्पन्न करने के लिए करना चाहता हूं। – 8one6

+0

ओह, याद किया कि, क्षमा करें। – mwaskom

उत्तर

9

मैं आपके पहले सामान्य प्रश्न का उत्तर दूंगा। कार्यों के लिए नियम है कि आप FacetGrid.map को पारित कर सकते हैं कर रहे हैं:

  • वे सरणी की तरह आदानों स्थितीय तर्क के रूप में, पहला तर्क एक्स अक्ष और दूसरा तर्क y अक्ष के लिए इसी के लिए इसी के साथ (हालांकि रखना चाहिए, दूसरी शर्त के बारे में अधिक शीघ्र ही
  • उन्होंने यह भी दो कीवर्ड तर्क को स्वीकार करना चाहिए: हालांकि तुम सिर्फ **kwargs पकड़ने और ऐसा नहीं कर सकते color, और label आप एक hue चर इन अंतर्निहित की साजिश रचने कार्य करने के लिए पारित किया जाना चाहिए की तुलना में उपयोग करना चाहते हैं,। उनके साथ कुछ भी अगर यह आपके द्वारा बनाई जा रही विशिष्ट साजिश के लिए प्रासंगिक नहीं है।
  • जब कॉल किया जाता है, तो उन्हें "वर्तमान में सक्रिय" matplotlib अक्ष पर एक साजिश खींचना चाहिए।

मामलों में जहां अपने कार्य है कि एक साजिश x, y, स्थितीय आदानों लेने के बिना सही लगती है ड्रॉ हो सकता है। मुझे लगता है कि मूल रूप से plt.plot का उपयोग करने के तरीके के साथ क्या हो रहा है। का उपयोग करने के बाद, बस g.set_axis_labels("Date", "Stat") पर कॉल करना आसान हो सकता है, जो आपके अक्षों को सही तरीके से नामित करेगा। अधिक अर्थपूर्ण टिक प्राप्त करने के लिए आप g.set(xticklabels=dates) भी करना चाह सकते हैं।

एक और सामान्य कार्य भी है, FacetGrid.map_dataframe। यहां नियम समान हैं, लेकिन आपके द्वारा पारित फ़ंक्शन को data नामक पैरामीटर में डेटाफ्रेम इनपुट स्वीकार करना होगा, और सरणी जैसी स्थितित्मक इनपुट लेने के बजाय यह उस डेटाफ्रेम में चर के अनुरूप स्ट्रिंग्स लेता है। पहलुओं के माध्यम से प्रत्येक पुनरावृत्ति पर, फ़ंक्शन को row, col, और hue स्तरों के संयोजन के मानों के लिए मुखौटा इनपुट डेटा फ्रेम के साथ बुलाया जाएगा।

def plot_by_date(x, y, color=None, label=None): 

    ... 

(मैं शरीर के बारे में अधिक उपयोगी होगा लेकिन, मैं:

तो अपने विशिष्ट मामले में, आप एक समारोह है कि हम plot_by_date कॉल कर सकते हैं कि कुछ इस तरह देखना चाहिए लिखने के लिए की आवश्यकता होगी वास्तव में नहीं जानते कि तारीखों और matplotlib के साथ बहुत कुछ कैसे करें)।अंत परिणाम यह है कि जब आप इस फ़ंक्शन को कॉल करते हैं तो इसे वर्तमान में सक्रिय अक्षरों पर प्लॉट करना चाहिए। फिर

g.map(plot_by_date, "Date", "Stat") 

और मुझे लगता है कि यह काम करना चाहिए।

+1

मेरा मतलब था, अगर मैं अपना खुद का फ़ंक्शन रोल करना चाहता हूं, तो उसे क्या वापस करना चाहिए? अर्थात। कहें कि मैं एक बेवकूफ काम करना चाहता हूं जो प्रत्येक पहलू में 'y = 2' पर एक क्षैतिज रेखा खींचता है और सभी इनपुट डेटा को अनदेखा करता है। तो वह समारोह कैसा दिखता है? – 8one6

+2

आह, वापसी मूल्य को नजरअंदाज कर दिया जाता है .... महत्वपूर्ण बात यह है कि फ़ंक्शन * प्लॉट *। असल में उस विशिष्ट उदाहरण के लिए आप केवल 'g.map (plt.axhline, y = 2) 'कर सकते हैं। निश्चित नहीं है कि अगर यह आपकी सामान्य समझ में मदद करता है। – mwaskom

+1

मैंने जो कुछ करने की कोशिश कर रहे हैं उसके बारे में मैंने कुछ और जोड़ा है। – mwaskom

संबंधित मुद्दे