MATLAB Answers

Even binned histogram to uneven bins?

6 views (last 30 days)
Tim Fulcher
Tim Fulcher on 18 Sep 2020
Commented: Star Strider on 21 Sep 2020
Hi all,
I have a csv file consisting of 256 bins each of 2mm width and I need to convert to uneven bins. 32 bins of 2mm width, 48 of 4mm width and 4 of 8mm depth. I would prefer not to use the bin edges as reference but rather the mid-point of the bins for reference but, if I need, I'll use the bin edges.
Can this be done using Matlab?
Apologies for not replying to my earlier posts.
Regards
Tim

  0 Comments

Sign in to comment.

Answers (5)

Star Strider
Star Strider on 18 Sep 2020
If you are using the histogram function, you can specify the bind widths using the edges option. See Specify Bin Edges of Histogram for a relevant example. Remeber that there is one more edge than the number of bins, so each bin must be defined as two specific bin edges. The histcounts function works similarly, if you are using that instead.

  5 Comments

Show 2 older comments
Star Strider
Star Strider on 19 Sep 2020
Try something like this:
x = logspace(-4, 3, 250)/2; % Simulate Data
y = (x+2).*exp(-0.075*x);
y = y/max(y); % Simulate Data
figure
plot(x, y, '-p') % Plot Simulated Data
grid
dx = diff(x); % X-Vector Differences
edgs = logspace(log10(min(dx)), log10(max(dx)), 51)/10; % Calculate Edges For 50 Bins
figure
histogram(y, edgs) % Resulting Histogram
Make appropriate changes to get the result you want.
Tim Fulcher
Tim Fulcher on 19 Sep 2020
Thanks SS. I'll try that when I get the time (see post below. Bastard employers want their pound of flesh. Nah, they're good and support me but I still need to do real work).
T

Sign in to comment.


Steven Lord
Steven Lord on 18 Sep 2020
Let's make some sample data.
x = randi(255, 1, 1e5);
Use bin edges that are the squares of the integers between 1 and 16. Each bin but the last contains its left edge but not its right (this is the default behavior), the last contains both its edges.
h = histogram(x, (1:16).^2);
To make it easier to see that the bin edges are at those specific values, set the ticks.
xticks((1:16).^2)
Check that MATLAB reports that the bins are not of uniform width.
h.BinWidth

  1 Comment

Tim Fulcher
Tim Fulcher on 18 Sep 2020
Thanks Steven, as per the previous reply I'll give that a go.

Sign in to comment.


Tim Fulcher
Tim Fulcher on 19 Sep 2020
Edited: Tim Fulcher on 19 Sep 2020
I tried the histogram option you guys suggested. It's better but not quite there.
Two attachments: what it should look like and what histogram is throwing out. The latter looks like it's taking the average of the data for those bin sizes and putting that average into all the bins of that size. I'll have a look at the data in the next few days (sorry, I'm a part time PhD student and have to earn my crust to pay the uni fees) and see whether that is the case.
And yes, if you're interested, it is a Bragg Peak.
T

  0 Comments

Sign in to comment.


Tim Fulcher
Tim Fulcher on 19 Sep 2020
Edited: Tim Fulcher on 19 Sep 2020
Here's the result from histogram:

  0 Comments

Sign in to comment.


Tim Fulcher
Tim Fulcher on 21 Sep 2020
Edited: Tim Fulcher on 21 Sep 2020
Hi guys,
eventually I went for hard coded. Tedious and inflexible but I think, in this case it might be the best solution.
Thanks very much for your help.
T

Community Treasure Hunt

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

Start Hunting!