matlab - plot軸最大値 - xticklabel



規格化一個直方圖,並在MATLAB中的百分比的y軸 (1)

編輯:好的,所以我通過閱讀更老的問題來回答我自己的問題。 我很抱歉問這個問題! 使用代碼

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

與相應的數據,而不是隨機數據工作正常。 只需要現在優化垃圾桶大小。

美好的一天,現在我知道你一定在想這個問題已經有一千次了。 從某種意義上說,你可能是對的,但是我從這裡找到的帖子找不到我的具體問題的答案,所以我想我可能只是問。 我會盡量清楚,但請告訴我,如果不明顯,我想要做什麼

好吧,我有一個有5000個元素的(行)矢量,所有這些都只是整數。 現在我想要做的就是繪製這5000個元素的直方圖,但是這樣一來y軸就有機會進入這個特定的bin,而x軸仍然是規則的,就像它給出該特定箱的值。

現在,對我來說有意義的是將所有事情規範化,但這似乎並不奏效,至少我是如何做的。

我的第一個嘗試是

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

我省略了其餘部分,因為它從某個文件導入大量數據,這並不重要。 總和=總和(一)工作正常,我可以看到我的matlab東西的矢量。 (我該怎麼稱呼它,控制台?)。 然而,除以trapz的區域只是改變我的x軸,而不是我的y軸。 一切都變得非常小,在10 ^ -3的數量級,而它應該在10的數量級。

現在環顧四周,有人建議使用

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

雖然這肯定會使y軸從0變為1,但是根本沒有歸一化。 我希望它能真正反映出進入某個垃圾桶的機會。 兩者結合也行不通。 我很抱歉,如果答案是非常明顯的,我只是沒有看到它。

編輯:雖然我意識到這是一個單獨的問題(已經被問了一百萬次),但是我剛剛用手選取的單元大小,直到它看起來不錯,因為在直方圖中沒有任何柱狀圖。 我已經看到了幾個不同的腳本,應該優化垃圾桶的大小,但沒有一個似乎在每一個情況下都做出“最好”的直方圖,不幸的是:如果所有的數字都是一個簡單的方法來選擇大小整數?


(只是為了結束這個問題)

直方圖是一個絕對的頻率曲線,所以所有頻率的和(hist函數的輸出矢量的和)總是其輸入矢量中的元素的數量。 所以,如果你想要一個百分比輸出,你需要做的就是將輸出中的每個元素除以該總數:

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

如果要重建數據的概率密度函數,則需要考慮直方圖的bin大小,並按以下方式劃分頻率:

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');





histogram