matlab - हिस्टोग्राम को सामान्य बनाना और मैटैब में प्रतिशत में y- अक्ष होने पर



histogram (1)

(बस सवाल बंद करने के लिए)

हिस्टोग्राम एक पूर्ण आवृत्ति की साजिश है, इसलिए सभी बिन आवृत्तियों का योग (हिस्ट फ़ंक्शन के आउटपुट वेक्टर की राशि) हमेशा अपने इनपुट वेक्टर में तत्वों की संख्या होती है। अतः यदि आपको एक प्रतिशत आउटपुट चाहिए जो आपको करने की ज़रूरत है, तो उस प्रत्येक संख्या को प्रत्येक कुल संख्या से आउटपुट में विभाजित किया जा रहा है:

x = randn(10000, 1);
numOfBins = 100;
[histFreq, histXout] = hist(x, numOfBins);
figure;
bar(histXout, histFreq/sum(histFreq)*100);
xlabel('x');
ylabel('Frequency (percent)');

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

x = randn(10000, 1);
numOfBins = 100;
[histFreq, histXout] = hist(x, numOfBins);
binWidth = histXout(2)-histXout(1);
figure;
bar(histXout, histFreq/binWidth/sum(histFreq));       
xlabel('x');
ylabel('PDF: f(x)');
hold on
% fit a normal dist to check the pdf
PD = fitdist(x, 'normal');
plot(histXout, pdf(PD, histXout), 'r');

संपादित करें: ठीक है, इसलिए मैंने अपने प्रश्न का उत्तर दिया, पुराने प्रश्नों को थोड़ा और पढ़ कर। प्रश्न पूछने के लिए मैं माफी चाहता हूँ! कोड का उपयोग करना

Y = rand(10,1);
C = hist(Y);
C = C ./ sum(C);
bar(C)

इसके बजाय यादृच्छिक डेटा के बजाय इसी डेटा के साथ काम ठीक है। बस अब बिन आकार को अनुकूलित करने की आवश्यकता है

शुभ दिन, अब मुझे पता है कि आपको यह सोचना होगा कि यह एक हजार बार पूछा गया है। एक तरह से, आप शायद सही हैं, लेकिन मुझे उन पदों से मेरे विशिष्ट प्रश्न का उत्तर नहीं मिला, जो मैंने यहां पाया था, इसलिए मैंने सोचा कि मैं भी पूछ सकता हूं मैं जितना संभव हो सके स्पष्ट होने की कोशिश करूंगा, लेकिन कृपया मुझे बताओ कि क्या यह स्पष्ट नहीं है कि मुझे क्या करना है

ठीक है, इसलिए मेरे पास 5000 तत्वों के साथ एक (पंक्ति) वेक्टर है, जो सभी केवल पूर्णांक हैं अब मैं क्या करना चाहता हूं, इन 5000 तत्वों के हिस्टोग्राम का साजिश है, लेकिन इस तरह से y- अक्ष उस निश्चित बिन में होने का मौका देता है, जबकि एक्स-अक्ष अभी भी नियमित रूप से होता है, क्योंकि इसमें देता है उस विशिष्ट बिन का मूल्य

अब, मेरे लिए क्या मायने रखता था कि सब कुछ सामान्य किया जाए, लेकिन ऐसा लगता नहीं है कि कम से कम मैं यह कैसे कर रहा हूं।

मेरा पहला प्रयास था

sums = sum(A);
hist(sums/trapz(sums),50)

मैंने बाकी को छोड़ दिया क्योंकि यह एक निश्चित फ़ाइल से बहुत सारे डेटा आयात करता है, जो वास्तव में कोई फर्क नहीं पड़ता राशियाँ = योग (ए) ठीक काम करती है, और मैं अपने मटैब चीज़ में वेक्टर को देख सकता हूं। (मुझे इसे क्या कहना चाहिए, कंसोल?)। हालांकि, फेज के साथ क्षेत्र को विभाजित करने से मेरी एक्स-अक्ष बदल जाती है, न कि मेरी y- अक्ष सब कुछ 10 ^ -3 के क्रम पर सुपर छोटे हो जाता है, जबकि यह 10 के क्रम पर होना चाहिए।

अब चारों ओर देख रहे हैं, किसी का उपयोग करने का सुझाव दिया

hist(sums,50)
ylabels = get(gca, 'YTickLabel');
ylabels = linspace(0,1,length(ylabels));
set(gca,'YTickLabel',ylabels); 

यद्यपि यह निश्चित रूप से y-axis 0 से 1 तक जाता है, यह बिल्कुल सामान्य नहीं है। मैं चाहता हूं कि यह वास्तव में एक निश्चित बिन में होने का मौका दर्शाए। दोनों का मेल भी काम नहीं करता है अगर जवाब बहुत स्पष्ट है तो मैं माफी मांगता हूं, मैं इसे देख नहीं पाया।

संपादित करें: हालांकि मुझे पता है कि यह एक अलग सवाल है (जिसे एक लाख बार कहा गया है), लेकिन बिन आकार जिसे मैंने हिसाब से लापता कोई भी बारह के रूप में अच्छी तरह से अच्छा नहीं देखा था। मैंने कई अलग-अलग लिपियों को देखा है जो बिन के आकार को अनुकूलित करना चाहते हैं, लेकिन उनमें से कोई भी नहीं, हर मामले में 'सबसे अच्छा' हिस्टोग्राम दिख रहा है, दुख की बात है: (यदि सभी नंबर हैं तो आकार लेने का एक आसान तरीका है पूर्णांकों?





histogram