Creating histogram without using built in function
40 次查看(过去 30 天)
显示 更早的评论
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?
采纳的回答
Voss
2022-1-28
编辑:Voss
2022-1-29
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 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Histograms 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!