Histogram with counting number of "1" per bin

5 views (last 30 days)
Hi,
I have the following data: The intensity of a stimulus can be varied on a certain range, subjects have to say then for each intensity, if they can perceive the stimulus. Out of this data I would like to plot a histogram - and so far I have not found any existent Matlab function to do so (?).
So say the data would look like:
A = [100 120 80 85 130 145 160 95 105 110 115 135 150;
0 1 0 0 1 1 1 1 1 1 0 0 1]
and I would like to split up the range [80,160] into 4 bins and count the number of 1's for each bin.

Accepted Answer

Image Analyst
Image Analyst on 4 May 2015
Try this:
A = [100 120 80 85 130 145 160 95 105 110 115 135 150];
counts = [ 0 1 0 0 1 1 1 1 1 1 0 0 1]
edges = linspace(80, 160, 5) % % 5 edges for 4 bins
myHistCounts = histcounts(A.*counts, edges)
works as long as your counts are only 0 and 1. You can have two of the same value, like 2 at 120 with a 1 as long as the 120's are separate, which I think they would be because each element is for one stimulus.
  3 Comments
MiauMiau
MiauMiau on 5 May 2015
And how do I plot that afterwards?
Image Analyst
Image Analyst on 5 May 2015
You can use plot() or bar(). I tend to prefer bar() for histograms.
bar(edges(1:end-1), myHistCounts, 'BarWidth', 1, 'FaceColor', 'b');
or something like that

Sign in to comment.

More Answers (1)

Ahmet Cecen
Ahmet Cecen on 4 May 2015
A trick for that would be to covert that data into this:
B=[120, 130, 145, 160, 95, 105, 110, 150];
basically keeping the only the values that has 1s below. Now you can use the hist function properly to get a histogram easily.
You can use the binranges argument to specify those bins from 80 to 160 by 20. Check:
doc hist

Categories

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

Tags

Community Treasure Hunt

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

Start Hunting!