# Two bar graphs - two data sets - different bin width

68 views (last 30 days)
Flo on 4 Jul 2016
Answered: Duncan Po on 5 Jul 2016
Hi everyone,
I am kinda new to matlab and may not have been asking the right question to google. Anyway, here is my problem: I've got two data sets called one and two:
none = length(one)
ntwo = length(two)
%h = nan(max(none,ntwo),2)
h(1:none,1)=one
h(1:ntwo,2)=two
From there I extract the best bin width and the theoretical best amount of bin for each data set ( following the The Freedman-Diaconis rule):
%one -------
minNumberOne = round(min(h(1:none,1)))
maxNumberOne = ceil(max(h(1:none,1)))
iqrVarOne = iqr(h(1:none,1))
hOne = ceil(2 * iqrVarOne * none^(-1/3))
binsOne = ceil((maxNumberOne - minNumberOne)/hOne)
%two -------
minNumberTwo = round(min(h(1:ntwo,2)))
maxNumberTwo = ceil(max(h(1:ntwo,2)))
iqrVarTwo = iqr(h(1:ntwo,2))
hTwo = ceil(2 * iqrVarTwo * ntwo^(-1/3))
binsTwo = ceil((maxNumberTwo - minNumberTwo)/hTwo)
From now I am a bit lost. I'd like to apply for each bar graph the number of bin and the bin width, AND displaying those graph on the same figure, like that:
My code:
figure(1)
data = [h(:,1) h(:,2)]
[y, x] = hist(data)
bar(x,y, 'group')
this code doesn't take into account the bins calculated before of course. Do you have any ideas on how to integrate that to my code?
Cheers everyone. I hope I have been clear enough...
Flo

José-Luis on 4 Jul 2016
one = rand(100,1);
two = rand(100,1);
nOne = 10;
nTwo = 15;
figure
histogram(one,nOne);
hold on;
histogram(two,nTwo);
%clearer
figure
ksdensity(one);
hold on;
ksdensity(two)
Flo on 5 Jul 2016
By looking on google I've found a way apparently. It may interest some person. Let me know what you think about it:
figure(1);
[dummy, t] = hist([one;two], numBin);
nx = hist(one, t); % Sort x into bins.
nx = transpose(nx/sum(nx));
ny = hist(two, t); % Sort y into bins.
ny = transpose(ny/sum(ny));
bar(t, [nx, ny]);

Duncan Po on 5 Jul 2016
histogram(x, 'BinMethod', 'fd')
or
[n, binedges] = histcounts(x, 'BinMethod', 'fd')