Two bar graphs - two data sets - different bin width

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

답변 (2개)

José-Luis
José-Luis 2016년 7월 4일
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)

댓글 수: 9

Flo
Flo 2016년 7월 4일
That actually works, but instead of having those kind of graph I'd like to control the bin sizes independently. would you know on how to do that ?
I keep your solution for now :)
thx
Please read the documetation for histogram. Sounds like you might want to define custom edges.
Flo
Flo 2016년 7월 4일
I'll have a look on that (already did to be honest). My main concern was to know whether it was feasible or not to keep the 'grouped' option with my kind of problem.
I'm not sure I follow. How do you want your plot to look?
Flo
Flo 2016년 7월 5일
I'd like my plot to follow the presentation of the one I posted in the first place (grouped) if such a thing is possible.
How would the grouping work if your custom edges have different sizes?
Flo
Flo 2016년 7월 5일
That was my very first question :)
Such a plot might be a mess depending on how you bins intersect though...
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
Duncan Po 2016년 7월 5일

0 개 추천

histogram/histcounts have builtin support for Freedman-Diaconis rule:
histogram(x, 'BinMethod', 'fd')
or
[n, binedges] = histcounts(x, 'BinMethod', 'fd')

카테고리

도움말 센터File Exchange에서 Annotations에 대해 자세히 알아보기

질문:

Flo
2016년 7월 4일

답변:

2016년 7월 5일

Community Treasure Hunt

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

Start Hunting!

Translated by