2014-05-12 13 views
14

मैंने कुछ समय के लिए उत्तर के लिए इंटरवेब्स खोजने में कुछ समय बिताया है, और मैंने जवाब के लिए एसओ को भी देखने की कोशिश की है, लेकिन मुझे लगता है कि मेरे पास सही शब्दावली नहीं है ... कृपया मुझे क्षमा करें अगर यह है कुछ ज्ञात समस्या का डुप्लिकेट, मैं खुशी से अपनी पोस्ट हटा दूंगा और उस पोस्ट को इसके बजाय संदर्भित करूंगा!Matplotlib: दो हिस्टोग्राम बनाने के लिए एक ही बिन चौड़ाई कैसे है?

किसी भी मामले में, मैं Matplotlib में एक ही आंकड़े पर दो हिस्टोग्राम प्लॉट करने की कोशिश कर रहा हूं। मेरे दो डेटा स्रोत 500 तत्वों की लंबी सूची हैं।

Uneven histograms

आप देख सकते हैं, हिस्टोग्राम डिफ़ॉल्ट मापदंडों के तहत असमान बिन आकार है, भले ही डिब्बे की संख्या में एक ही है: समस्या का सामना करना पड़ रहा हूँ का एक उदाहरण प्रदान करने के लिए, कृपया निम्न छवि देखें । मैं गारंटी देना चाहता हूं कि दोनों हिस्टोग्राम के लिए बिन चौड़ाई समान हैं। क्या कोई और तरीका है इसे करने के लिए?

अग्रिम धन्यवाद!

उत्तर

13

मुझे लगता है कि एक सतत तरीका है जो आपके अधिकांश डेटासेट के लिए वितरण सीमा के बारे में चिंता किए बिना, ज्यादातर मामलों के लिए आसानी से काम करेगा, डेटासेट को एक साथ बड़े पैमाने पर रखना होगा, डिब्बे किनारों को निर्धारित करना होगा और तो साजिश:

a=np.random.random(100)*0.5 #a uniform distribution 
b=1-np.random.normal(size=100)*0.1 #a normal distribution 
bins=np.histogram(np.hstack((a,b)), bins=40)[1] #get the bin edges 
plt.hist(a, bins) 
plt.hist(b, bins) 

enter image description here

+0

दोनों उत्तरों को ऊपर उठाया, लेकिन यह निश्चित रूप से डेटा-संचालित तरीके से इसे कैसे करें, इस पर स्पष्ट निर्देश प्रदान करता है। धन्यवाद! – ericmjl

7

मुझे लगता है कि आप डेटा सेट दोनों के लिए समान बिन आकार के साथ आने के लिए बिन पैरामीटर के साथ रेंज पैरामीटर का उपयोग कर सकते हैं।

plt.hist(x, bins=n, range=(a,b)) 

जहां अगर आप (b-a)/n ही के अनुपात रखने के लिए, आप एक ही बिन आकारों के साथ खत्म करना चाहिए।

+1

यह मेरे लिए काम किया स्वीकार किए जाते हैं एक ऐसा नहीं किया। – jimh

3

आप hist की वापसी मान का उपयोग करना चाहिए।

foo = np.random.normal(loc=1, size=100) # a normal distribution 
bar = np.random.normal(loc=-1, size=10000) # a normal distribution 
n, bins, patches = plt.hist(foo, bins=50, range=[-6, 6], normed=True) 
n, bins, patches = plt.hist(bar, bins=bins, alpha=0.5, normed=True) 

enter image description here

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