2015-04-15 9 views
8

Seaborn का उपयोग करके, मैं एक ही आंकड़े पर pandas DataFrame के एकाधिक कॉलम के बॉक्सप्लॉट बना सकता हूं। मैं फ्लायर (आउटलायर) के लिए एक कस्टम शैली लागू करना चाहता हूं, उदा। मार्कर प्रतीक, रंग और मार्कर आकार सेट करना।Seaborn boxplot में फ़्लियर (बाहरी) शैली को सेट करना

The API documentation on seaborn.boxplot, हालांकि, केवल fliersize पर एक तर्क प्रदान करता है जो मुझे फ्लायर के आकार को नियंत्रित करने देता है लेकिन रंग और प्रतीक नहीं।

के बाद से Seaborn की साजिश रचने के लिए matplotlib का उपयोग करता है, मैंने सोचा कि मैं तो जैसे boxplot कार्य करने के लिए एक matplotlib स्टाइल शब्दकोश प्रदान कर सकता है:

import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 

# create a dataframe 
df = pd.DataFrame({'column_a': [3, 6, 200, 100, 7], 'column_b': [1, 8, 4, 150, 290], 'column_c': [6, 7, 20, 80, 275]}) 

# set figure size 
sns.set(rc={"figure.figsize": (14, 6)}) 

# define outlier properties 
flierprops = dict(marker='o', markersize=5) 

# create boxplot 
ax = sns.boxplot(df, vert=False, showmeans=True, flierprops=flierprops) 
plt.show() 

परिणाम: प्रदान की डिक्शनरी के अनुसार

Boxplot , मैं करूंगा column_c के फ्लायर का प्रतिनिधित्व करने वाले बड़े लाल सर्कल की अपेक्षा करें, लेकिन इसके बजाय, मानक सेटिंग्स अभी भी उपयोग की जा रही हैं।

This thread describes a similar problem जब matplotlib सीधे उपयोग किया जाता है - हालांकि, चर्चा से मैंने अनुमान लगाया कि यह matplotlib के हाल के संस्करणों का उपयोग करते समय तय किया जाना चाहिए।

मैंने इसे iPython नोटबुक (iPython 3.10), matplotlib 1.4.3 और seaborn 0.5.1 के साथ करने की कोशिश की।

उत्तर

5

सेबर्न का बॉक्सप्लॉट कोड आपके फ़्लियरप्रॉप तर्क को अनदेखा करता है और Matplotlib के तर्कों को पार करने से पहले इसे अपने आप ओवरराइट करता है। Matplotlib का बॉक्सप्लॉट अपने लौटने वाले मूल्य के हिस्से के रूप में सभी फ्लायर ऑब्जेक्ट्स भी लौटाता है, इसलिए आप बॉक्सप्लॉट चलाने के बाद इसे संशोधित कर सकते हैं, लेकिन सेबर्न इसे वापस नहीं करता है।

फ्लियरप्रॉप (और sym) की ओवरराइटिंग एक बग की तरह लगती है, इसलिए मैं देख सकता हूं कि मैं इसे ठीक कर सकता हूं: this issue देखें। इस बीच, आप इसके बजाय matplotlib के बॉक्सप्लॉट का उपयोग करने पर विचार करना चाह सकते हैं। समुद्री डाकू के कोड को देखकर उपयोगी हो सकता है (बॉक्सप्लॉट वितरण में है)।


अपडेट: अब वहाँ एक पुल अनुरोध है कि यह समस्या नहीं आती (flierprops और अन्य *props, लेकिन नहीं sym)

+3

बस चाहता हूँ ध्यान दें कि जबकि 'sns.boxplot' अभी भी' sym' पैरामीटर पर ध्यान नहीं देगा, आपके प्रश्न में कोड अब पूरी तरह से काम करना चाहिए जिसमें फ्लायर के लिए सही मार्कर सेट करना शामिल है। – mwaskom

+0

हाँ, नवीनतम पीब इंस्टॉल गिट + गिट के साथ नवीनतम सेबर्न मास्टर में अपग्रेड करने के बाद: // github.com/mwaskom/seaborn.git # egg = seaborn', यह उपरोक्त मेरे प्रश्न में दिए अनुसार काम करता है। बहुत बहुत धन्यवाद लड़कों! – Dirk

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