2013-02-12 17 views
19

मैं का उपयोग कर एक स्टैक्ड बार साजिश कर रही हूँ में समारोह:संपादित dataframe.plot का उपयोग कर सलाखों की चौड़ाई() matplotlib

DataFrame.plot(kind='bar',stacked=True) 

मैं सलाखों की चौड़ाई को नियंत्रित करना चाहते हैं, जिससे कि सलाखों के एक दूसरे से जुड़े हुए हैं जैसे एक हिस्टोग्राम

मैंने प्रलेखन को देखा है लेकिन इसका कोई फायदा नहीं हुआ - कोई सुझाव नहीं? क्या यह इस तरह से करना संभव है?

+0

आप * चौड़ाई = 1 (बार में) पास करना चाहते हैं लेकिन साजिश आपको नहीं देगी ...: –

+0

अजीब। संरेखण कीवर्ड mpl के विपरीत व्यवहार करता है और लॉग कीवर्ड भी अजीब है। @ ओसमंड, मैं इसका उपयोग करके इसे क्रियान्वित कर दूंगा: ax.bar (df.index.values, df.values) –

+0

[यह प्रतिक्रिया] देखें (https://stackoverflow.com/a/27321764/577088) सबसे ऊपर के लिए- अद्यतित उत्तर स्वीकृत उत्तर काफी पुराना है। – senderle

उत्तर

40

इस सवाल भर में आने वाले किसी के लिए:

पांडा 0.14 के बाद से, सलाखों के साथ साजिश रचने एक है 'चौड़ाई' कमांड: https://github.com/pydata/pandas/pull/6644

ऊपर दिया गया उदाहरण अब

का उपयोग कर हल किया जा सकता है
df.plot(kind='bar', stacked=True, width=1) 
12

यदि आपको लगता है कि आपको मैटलप्लिब के साथ बारप्लॉट "पोस्टप्रोसेस" करना है क्योंकि पांडा आंतरिक रूप से सलाखों की चौड़ाई निर्धारित करता है।

आयताकार जो ऑब्जेक्ट्स हैं, वे हैं। तो तुम इन कंटेनरों के माध्यम से पुनरावृति और व्यक्तिगत रूप से आयत की चौड़ाई सेट करने के लिए:

In [208]: df = pd.DataFrame(np.random.random((6, 5)) * 10,    
         index=list('abcdef'), columns=list('ABCDE')) 

In [209]: df 
Out[209]: 
    A B C D E 
a 4.2 6.7 1.0 7.1 1.4 
b 1.3 9.5 5.1 7.3 5.6 
c 8.9 5.0 5.0 6.7 3.8 
d 5.5 0.5 2.4 8.4 6.4 
e 0.3 1.4 4.8 1.7 9.3 
f 3.3 0.2 6.9 8.0 6.1 

In [210]: ax = df.plot(kind='bar', stacked=True, align='center') 

In [211]: for container in ax.containers: 
       plt.setp(container, width=1) 
    .....:   

In [212]: x0, x1 = ax.get_xlim() 

In [213]: ax.set_xlim(x0 -0.5, x1 + 0.25) 
Out[213]: (-0.5, 6.5) 

In [214]: plt.tight_layout() 

stacked_bar.png

+1

अच्छा जवाब। मुझे एहसास नहीं हुआ कि 'पोस्टप्रोसेसिंग' एक विकल्प था – zach

+0

मैं एक पूर्ववर्ती बार साजिश पर अतिरिक्त सलाखों को ओवरप्लॉट करने के लिए df.plot का उपयोग कर रहा हूं। @ बीएमयू, आपकी विधि मेरे लिए काम नहीं करती है क्योंकि यह नए लोगों के अलावा सभी पुरानी साजिश वस्तुओं को बदल देती है। Df.plot() द्वारा बनाए गए नए सलाखों की चौड़ाई को कैसे बदलें? – CPBL

+0

@ क्रिस्टोफरबारिंगटन-लेघ शायद आप बाद के सूचकांक (आपके पिछले कंटेनर ऑब्जेक्ट्स की संख्या पर) में कंटेनर ऑब्जेक्ट्स पर पुनरावृत्ति शुरू कर सकते हैं, हालांकि एक उदाहरण बेहतर होगा। मुझे लगता है कि आपको इसे एक अलग प्रश्न में बेहतर पूछना चाहिए। – bmu

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