2016-02-01 9 views
5

मैं स्कोर (score), कुछ श्रेणियों (centrality) के आधार पर वर्गीकृत और कुछ अन्य (model) द्वारा रंग के वितरण का एक सेट की तुलना करना चाहते हैं। मैं Seaborn साथ निम्नलिखित की कोशिश की है:Tweaking seaborn.boxplot

plt.figure(figsize=(14,6)) 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1)) 
seaborn.despine(offset=10, trim=True) 
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight") 

वहाँ मैं इस साजिश के साथ कुछ समस्याएं हैं:

  • वहाँ बाहरी कारकों के कारण की एक बड़ी राशि है और मुझे पसंद नहीं है कि वे किस तरह यहां तैयार कर रहे हैं । क्या मैं उन्हें हटा सकता हूँ? क्या मैं कम अव्यवस्था दिखाने के लिए उपस्थिति बदल सकता हूं? क्या मैं उन्हें कम से कम रंग सकता हूं ताकि उनका रंग बॉक्स रंग से मेल खा सके?
  • model मूल्य original विशेष है क्योंकि अन्य सभी वितरणों की तुलना original के वितरण से की जानी चाहिए। यह साजिश में दृष्टि से परिलक्षित होना चाहिए। क्या मैं original प्रत्येक समूह का पहला बॉक्स बना सकता हूं? क्या मैं इसे किसी भी तरह ऑफसेट या मार्क कर सकता हूं? क्या प्रत्येक original वितरण और बक्से के समूह के माध्यम से एक क्षैतिज रेखा खींचना संभव होगा?
  • score के मूल्यों के कुछ बहुत छोटे होते हैं, कैसे उन्हें दिखाने के लिए y- अक्ष के समुचित स्केलिंग करना है?

enter image description here

संपादित करें:

यहाँ एक लॉग बढ़ाया y- अक्ष के साथ एक उदाहरण है - यह भी अभी तक आदर्श नहीं। कुछ बक्से कम अंत में कट क्यों लगते हैं?

enter image description here

+1

ब्लू आउटलाइजर्स एक matplotlib बग हैं, और उन्हें आपके समुद्री तट को अद्यतन करके टाला जा सकता है। लेकिन मैं निश्चित रूप से outliers को हटा नहीं होगा! – mwaskom

+2

क्या आपने [लॉग-स्केलिंग] (http://stanford.edu/~mwaskom/software/seaborn/examples/horizontal_boxplot.html) वाई वैरिएबल की कोशिश की है? – mwaskom

+0

@mwaskom हां, लेकिन वह साजिश के शीर्ष पर बहुत अधिक मूल्यों के बार "संपीड़ित" करता है। क्या कोई समझौता है, यानी धुरी के केवल एक हिस्से के लिए लॉग-स्केलिंग है? – clstaudt

उत्तर

14

बाहरी प्रदर्शन

ताकि आप flierprops की स्थापना करके बाहरी कारकों के कारण के प्रदर्शन को समायोजित कर सकता है आप, seaborn.boxplot के लिए किसी भी तर्क पारित करने के लिए है कि आप plt.boxplot को पारित कर सकते हैं (documentation देखें) सक्षम होना चाहिए । Here कुछ उदाहरण हैं जो आप अपने आउटलायर के साथ कर सकते हैं।

आप उन्हें प्रदर्शित करने के लिए नहीं करना चाहते हैं, तो आप

seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       showfliers=False) 

कर सकता है या आप उन्हें तो जैसे हल्के भूरे रंग बना सकता है:

flierprops = dict(markerfacecolor='0.75', markersize=5, 
       linestyle='none') 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       flierprops=flierprops) 

समूहों के आदेश

आप hue_order के साथ मैन्युअल रूप से समूहों का क्रम सेट कर सकते हैं, उदाहरण के लिए

seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       hue_order=["original", "Havel..","etc"]) 

y- अक्ष की स्केलिंग

तुम सिर्फ न्यूनतम और सभी y- मानों की अधिकतम मान मिलता है और y_lim अनुसार सेट कर सकता है?कुछ इस तरह:

y_values = data["scores"].values 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       y_lim=(np.min(y_values),np.max(y_values))) 

संपादित करें: यह अंतिम बिंदु वास्तव में मतलब नहीं है के बाद से स्वत: y_lim सीमा पहले ही सभी मान शामिल होगा, लेकिन मैं सिर्फ कैसे इन सेटिंग्स को समायोजित करने के लिए एक उदाहरण के रूप में यह जा रहा हूँ । जैसा कि टिप्पणियों में उल्लेख किया गया है, लॉग-स्केलिंग शायद अधिक समझ में आता है।

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