# Issue with moving from hist() to histogram(). Different values?

2 views (last 30 days)
Andrew Feenan on 30 Sep 2022
Commented: Steven Lord on 30 Sep 2022
Hi,
I am changing this code
[bincount,binpos] = hist(data,min(50,numel(data)/5));
to this, as MATLAB recomends using histogram.
h = histogram(data,min(50,numel(data)/5));
bincount2 = h.BinCounts;
edges = h.BinEdges;
width = h.BinWidth;
binpos2 = edges(1:end-1) + width/2;
The output is
Which is fine. However, I have noticed that from values 1 to 25 bincount and bincount2 have different values. The values are the same from 26 to 50.
It is the exact same issue with binpos and binpos2.
Is there any reason or solution for this?
Andrew

Steven Lord on 30 Sep 2022
As stated on this documentation page the hist function operates with bin centers while histogram operates with bin edges. If you compare binpos and edges they're likely not the same. See the last section on the page for a discussion of how to convert bin centers to bin edges.
##### 2 CommentsShowHide 1 older comment
Steven Lord on 30 Sep 2022
The data is exactly the same, but are the bins? In the two examples below I bin the same data. In the first case the first bin is [1, 2) and so only those values in x that are equal to 1 fall into the first bin.
x = randi(2, 1, 10)
x = 1×10
1 2 1 2 1 2 1 2 1 2
[counts1, bins1] = histcounts(x, [1 2 3])
counts1 = 1×2
5 5
bins1 = 1×3
1 2 3
In the second case the first bin is slightly larger [1, 2.001) and so all the elements in x (which are either 1 or 2) fall into the first bin.
[counts2, bins1] = histcounts(x, [1 2.001 3])
counts2 = 1×2
10 0
bins1 = 1×3
1.0000 2.0010 3.0000

### Categories

Find more on Data Distribution Plots in Help Center and File Exchange

R2022b

### Community Treasure Hunt

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

Start Hunting!