2014-10-10 6 views
6

का उपयोग करते समय matplotlibs बॉक्सप्लॉट का अजीब व्यवहार matplotlib के boxplot फ़ंक्शन में कुछ अजीब व्यवहार का सामना कर रहा हूं जब मैं "notch" आकार का उपयोग कर रहा हूं। मैं कुछ कोड का उपयोग कर रहा हूं जिसे मैंने कुछ समय पहले लिखा है और उन मुद्दों को कभी नहीं मिला - मैं सोच रहा हूं कि समस्या क्या है। कोई विचार?पायदान आकार

weird behaviour on notched boxplots

जब मैं बारी पायदान आकार इसे बंद कर लग रहा है, हालांकि सामान्य

unnotched boxplots look normal

इस कोड होगा:

def boxplot_modified(data): 

    fig = plt.figure(figsize=(8,6)) 
    ax = plt.subplot(111) 

    bplot = plt.boxplot(data, 
      #notch=True,   # notch shape 
      vert=True,   # vertical box aligmnent 
      sym='ko',   # red circle for outliers 
      patch_artist=True, # fill with color 
      ) 

    # choosing custom colors to fill the boxes 
    colors = 3*['lightgreen'] + 3*['lightblue'], 'lightblue', 'lightblue', 'lightblue'] 
    for patch, color in zip(bplot['boxes'], colors): 
     patch.set_facecolor(color) 

    # modifying the whiskers: straight lines, black, wider 
    for whisker in bplot['whiskers']: 
     whisker.set(color='black', linewidth=1.2, linestyle='-')  

    # making the caps a little bit wider 
    for cap in bplot['caps']: 
     cap.set(linewidth=1.2) 

    # hiding axis ticks 
    plt.tick_params(axis="both", which="both", bottom="off", top="off", 
      labelbottom="on", left="off", right="off", labelleft="on") 

    # adding horizontal grid lines 
    ax.yaxis.grid(True) 

    # remove axis spines 
    ax.spines["top"].set_visible(False) 
    ax.spines["right"].set_visible(False) 
    ax.spines["bottom"].set_visible(True) 
    ax.spines["left"].set_visible(True) 

    plt.xticks([y+1 for y in range(len(data))], 8*['x']) 

    # raised title 
    #plt.text(2, 1, 'Modified', 
    #  horizontalalignment='center', 
    #  fontsize=18) 

    plt.tight_layout() 
    plt.show() 

boxplot_modified(df.values) 

और जब मैं बिना एक सादे साजिश बनाने के अनुकूलन, समस्या अभी भी होती है:

def boxplot(data): 

    fig = plt.figure(figsize=(8,6)) 
    ax = plt.subplot(111) 

    bplot = plt.boxplot(data, 
      notch=True,   # notch shape 
      vert=True,   # vertical box aligmnent 
      sym='ko',   # red circle for outliers 
      patch_artist=True, # fill with color 
      ) 

    plt.show() 
boxplot(df.values) 

notch plot without customization still looks weird

+0

क्या आप डेटा सहित स्वयं निहित उदाहरण प्रदान कर सकते हैं? –

+0

यह एक और बॉक्सप्लॉट रिग्रेशन जैसा दिखता है ... क्या आप ए) एक आत्मनिर्भर उदाहरण बना सकते हैं b) github पर कोई समस्या बनाएं? – tacaswell

+0

दोनों ने किया! यहां एक [स्वयं निहित उदाहरण] है (http://nbviewer.ipython.org/github/rasbt/matplotlib-gallery/blob/master/bugreport/boxplot_notch/boxplot_notch.ipynb) और यहां [github पर समस्या] (https : //github.com/matplotlib/matplotlib/issues/3631) – Sebastian

उत्तर

6

ठीक है, के रूप में यह पता चला है, यह वास्तव में एक सही व्यवहार है;)

Wikipedia से:

दांतेदार बॉक्स भूखंडों एक की "निशान" या संकुचन लागू मध्य के चारों ओर बॉक्स। मध्यस्थों के अंतर के महत्व के लिए एक मोटा गाइड पेश करने में नोट्स उपयोगी हैं; यदि दो बक्से के निशान ओवरलैप नहीं होते हैं, तो यह मध्यस्थों के बीच सांख्यिकीय रूप से महत्वपूर्ण अंतर का सबूत प्रदान करता है। पायदान की चौड़ाई नमूना के अंतराल सीमा के अनुपात के समान है और नमूना के आकार की वर्ग जड़ के विपरीत आनुपातिक है। हालांकि, सबसे उपयुक्त गुणक के बारे में अनिश्चितता है (क्योंकि यह नमूने के भिन्नताओं की समानता के आधार पर भिन्न हो सकता है)। एक सम्मेलन +/- 1.58 * IQR/sqrt (n) का उपयोग करना है।

इस पर भी issue on GitHub में चर्चा की गई; आर सबूत के रूप में एक समान उत्पादन पैदा करता है कि यह व्यवहार "सही" है।

इस प्रकार, अगर हमारे पास नोट किए गए बॉक्स प्लॉट्स में यह अजीब "फ़्लिप" उपस्थिति है, तो इसका मतलब यह है कि पहले क्वार्टाइल का मतलब तीसरा चौथाई के लिए माध्य के विपरीत और इसके विपरीत के मुकाबले कम मूल्य है। यद्यपि यह बदसूरत लग रहा है, यह वास्तव में मध्य के विश्वास (ए) के बारे में उपयोगी जानकारी है।

एक बूटस्ट्रैपिंग (प्रतिस्थापन एक नमूना वितरण, यहाँ के मापदंडों का अनुमान लगाने के साथ यादृच्छिक नमूना: विश्वास के अंतराल) इस प्रभाव को कम कर सकता है:

plt.boxplot प्रलेखन से:

बूटस्ट्रैप: कोई नहीं (डिफ़ॉल्ट) या पूर्णांक नोट किए गए बॉक्सप्लॉट के लिए औसत के आसपास आत्मविश्वास अंतराल बूटस्ट्रैप बूट करना है या नहीं। यदि बूटस्ट्रैप == कोई नहीं, कोई बूटस्ट्रैपिंग किया जाता है, और नौच एक गाऊसी आधारित उपगामी सन्निकटन का उपयोग कर गणना कर रहे हैं (मैकगिल, आर, Tukey, जेडब्ल्यू, और लार्सन, वाशिंगटन, 1978, और केंडल और स्टुअर्ट, 1967 को देखने के)। अन्यथा, बूटस्ट्रैप को 95% आत्मविश्वास अंतराल निर्धारित करने के लिए मध्यस्थ बूटस्ट्रैप को निर्दिष्ट करता है। 1000 और 10000 के बीच मानों की अनुशंसा की जाती है।

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