2012-09-06 18 views
24

मेरे पास डेटा (उनमें से 100) गिनती है, प्रत्येक एक बिन (0 से 99) के अनुरूप है। मुझे इन आंकड़ों को हिस्टोग्राम के रूप में प्लॉट करने की आवश्यकता है। हालांकि, हिस्टोग्राम उन डेटा को गिनती है और सही ढंग से साजिश नहीं करता है क्योंकि मेरा डेटा पहले से ही पिन किया गया है।पाइथन प्लॉट सरल हिस्टोग्राम को बाइन डेटा दिया गया

import random 
import matplotlib.pyplot as plt 
x = random.sample(range(1000), 100) 
xbins = [0, len(x)] 
#plt.hist(x, bins=xbins, color = 'blue') 
#Does not make the histogram correct. It counts the occurances of the individual counts. 

plt.plot(x) 
#plot works but I need this in histogram format 
plt.show() 
+0

आप में इस [जवाब] कोड इस्तेमाल कर सकते हैं (http://stackoverflow.com/a/37559471/2087463) या इस [जवाब] (http://stackoverflow.com/a/37548733/2087463) हिस्टोग्राम के रूप में पहले से ही पिन किए गए डेटा को साजिश करने के लिए एक उदाहरण के रूप में। थोड़ी देर के लिए प्रयास करने के बाद – tmthydvnprt

उत्तर

33

मैं तुम्हें क्या तो सही ढंग से हासिल करना चाहते हैं समझने हूँ, तो तुम क्या चाहते आप देना चाहिए निम्नलिखित:

import matplotlib.pyplot as plt 
plt.bar(range(0,100), x) 
plt.show() 

यह hist() उपयोग नहीं करता है, लेकिन ऐसा लगता है आप पहले से ही अपने डेटा डाल दिया है डिब्बे में तो कोई ज़रूरत नहीं है।

+0

धन्यवाद रेड्रा। इससे – Curious

+0

मदद मिली यदि आप 'बार' को 'हिस्ट' आउटपुट की तरह दिखने के लिए चाहते हैं तो इस [उत्तर] में कोड का उपयोग करें (http://stackoverflow.com/a/37559471/2087463) या यह [उत्तर] (http: //stackoverflow.com/a/37548733/2087463) 'बार' प्लॉट के माध्यम से हिस्टोग्राम प्लॉट करने के लिए एक उदाहरण के रूप में। – tmthydvnprt

0

matplotlib दस्तावेज में हिस्टोग्राम examples पर एक नज़र डालें। आपको hist फ़ंक्शन का उपयोग करना चाहिए। यदि डिफ़ॉल्ट रूप से यह आपके द्वारा अपेक्षित परिणाम उत्पन्न नहीं करता है, तो hist पर तर्कों के साथ खेलें और hist पर प्रदान करने से पहले अपने डेटा को तैयार/रूपांतरित/संशोधित करें। यह वास्तव में मुझे स्पष्ट नहीं है कि आप क्या हासिल करना चाहते हैं, इसलिए मैं इस बिंदु पर मदद नहीं कर सकता।

+0

मैंने इस सवाल से पूछा। मेरी एकमात्र चिंता यह है कि अगर मैं उपरोक्त कोड हिस्ट फ़ंक्शन के साथ करता हूं तो मैं प्राप्त कर सकता हूं। – Curious

12

समस्या आपके xbins के साथ है। वर्तमान में आपके पास

xbins = [0, len(x)] 

जो आपको सूची [0, 100] देगा। इसका मतलब है कि आप केवल 1 बिन (2 नहीं) को 0 से ऊपर और 100 से नीचे बाध्य देखेंगे। मुझे पूरी तरह से यकीन नहीं है कि आप अपने हिस्टोग्राम से क्या चाहते हैं। आप 2 असमान स्थान दिया गया डिब्बे करना चाहते हैं, तो आप

xbins = [0, 100, 1000] 

का उपयोग एक बिन में 100 से नीचे सब कुछ, और अन्य बिन में सब कुछ दिखाने के लिए कर सकते हैं। एक और विकल्प समानांतर दूरी वाले डिब्बे की एक निश्चित संख्या प्राप्त करने के लिए एक पूर्णांक मान का उपयोग करना होगा। दूसरे शब्दों में

plt.hist(x, bins=50, color='blue') 

जहां डिब्बे वांछित डिब्बे की संख्या है।

एक तरफ ध्यान दें, जब भी मुझे मैटलप्लिब के साथ कुछ कैसे करना याद नहीं है, तो मैं आमतौर पर thumbnail gallery पर जाऊंगा और एक ऐसा उदाहरण ढूंढूंगा जो मैं पूरा करने की कोशिश कर रहा हूं। इन उदाहरणों में सभी स्रोत कोड के साथ हैं, इसलिए वे काफी उपयोगी हैं। Matplotlib के लिए documentation भी बहुत आसान हो सकता है।

2

मुझे पूरा यकीन है कि आपकी समस्या डिब्बे है। यह सीमाओं की सूची नहीं है बल्कि बिन किनारों की एक सूची है।

xbins = [0,len(x)] 

का संकेत है कि आप 0 पर एक बिन बढ़त और 100 से कम एक चाहते तो तुम तुम क्या चाहते 0 से 100 के करने के लिए एक बिन मिल [0, 100] युक्त एक सूची अपने मामले में रिटर्न है:

xbins = [x for x in range(len(x))] 

रिटर्न कौन सा:

[0,1,2,3, ... 99] 

कौन सा बिन इंगित करता है किनारों आप चाहते हैं।

7

कूल, धन्यवाद! यहाँ मैं क्या सोचता ओपी करना चाहता था है:

import random 
import matplotlib.pyplot as plt 
x=[x/1000 for x in random.sample(range(100000),100)] 
xbins=range(0,len(x)) 
plt.hist(x, bins=xbins, color='blue') 
plt.show() 
0

साथ ही आप numpy की कोई जरूरत इस matplotlib का उपयोग hist प्राप्त कर सकते हैं,।आपने अनिवार्य रूप से पहले से ही xbins के रूप में डिब्बे बनाए हैं। इस मामले में x आपके वजन होंगे।

plt.hist(xbins,weights=x) 
संबंधित मुद्दे