Creating histogram without using built in function

I am trying to create a code that mimics the hist() function but I am running into an issue on the final bin.
Here is what I have:
Pie=sin(2*pi*tt); %array of data p=sin(2*pi*t/T)
L=10; %number of bins
minPie = min(Pie); %min value of array
maxPie = max(Pie); %max value of array
binwidth = (maxPie - minPie)/L; %width of bin
binnum = 1+floor((Pie - minPie) / binwidth); %value of array to a bin
bincounts = accumarray(binnum(:), 1); %amount to each bin
X = minPie + (0:L) * binwidth; %X of histogram
figure (1)
bar(X, bincounts) %my histogram
figure (2)
hist(Pie,10) %matlab histogram
My code returns this figure which has 11 bins at a bin width of 0.2.
Matlab's hist function returns this figure which has 10 bins with a bin width of 0.2.
How can I change my last bin so that the two figures are identical?

1 件のコメント

David Fariyike
David Fariyike 2022 年 1 月 28 日
tt on the sin function is just equal spaced intervals (linspace) from an initial to a final time.

サインインしてコメントする。

 採用された回答

Voss
Voss 2022 年 1 月 28 日
編集済み: Voss 2022 年 1 月 29 日

1 投票

You're going to run into edge effects like that, due to the nature of floating-point arithmetic. You can just fix values out of bounds after calculating them.
tt = linspace(0,10,100);
Pie=sin(2*pi*tt); %array of data p=sin(2*pi*t/T)
L=10; %number of bins
minPie = min(Pie); %min value of array
maxPie = max(Pie); %max value of array
binwidth = (maxPie - minPie)/L; %width of bin
binnum = 1+floor((Pie - minPie) / binwidth); %value of array to a bin
binnum(binnum < 1) = 1; % correct the edge effects
binnum(binnum > L) = L;
% bincounts = accumarray(binnum(:), 1); %amount to each bin
bincounts = zeros(1,L);
for ii = 1:L
bincounts(ii) = nnz(binnum == ii);
end
% use the bin centers for plotting:
X = minPie + (0.5:L-0.5) * binwidth; %X of histogram
figure (1)
bar(X, bincounts) %my histogram
figure (2)
hist(Pie,L) %matlab histogram

その他の回答 (0 件)

カテゴリ

製品

リリース

R2021a

質問済み:

2022 年 1 月 28 日

編集済み:

2022 年 1 月 29 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by