Does anyone knows how to stack 2 histogram. I have certain area data for 20 years. I am calculating yearly number of events by hist command. And also I have another area data for 20 years. Doing the same, calculating yearly number of events by hist command for the area also. Note for 2 data time the same, 1980-2000 in years.
Now I wanted 2 hist data stack. Is there any way to do it?
Thanks!

4 Comments

José-Luis
José-Luis on 30 Jun 2016
What do you mean by stack?
davit petraasya
davit petraasya on 30 Jun 2016
Edited: davit petraasya on 30 Jun 2016
adding y values, y1 and y2 values. Notice they are different size of vectors.
José-Luis
José-Luis on 30 Jun 2016
I still don't get it. Could you show a figure as an example? And some data?
Stephen Licata
Stephen Licata on 23 Dec 2020
Edited: Stephen Licata on 23 Dec 2020
That is a very good and fun example - many thanks!
BTW, if you want a special color, like 'gray' (which does not have a Matlab shortcut symbol code), do this bar command
bar(binrng,counts2,'FaceColor', [0.75 0.75 0.75])
which is equivalent to this version using the RGB integer values:
bar(binrng,counts2,'FaceColor', [192 192 192]/255)

Sign in to comment.

 Accepted Answer

Star Strider
Star Strider on 30 Jun 2016
The hist function does not offer a 'stacked' option, but you can create the effect easily enough with the histc function and a bar plot.
Experiment with this to get the result you want with your data:
d1 = randi(9, 50, 1); % Create Data
d2 = randi(9, 50, 1); % Create Data
binrng = 1:9; % Create Bin Ranges
counts1 = histc(d1, binrng); % Histogram For ‘d1’
counts2 = histc(d2, binrng); % Histogram For ‘d2’
counts3 = counts1 + counts2; % Histogram Sum ‘d1’+‘d2’
figure(1)
bar(binrng, counts3, 'b')
hold on
bar(binrng, counts1, 'y')
hold off
legend('Data 1', 'Data 2')
The idea is straightforward: create histogram counts for both sets of data, add them, then use the bar plot to first plot the sum, then overplot with one of the others. That will create your stacked histogram plot.

11 Comments

Thanks Strider, this is exactly what I needed. One thing more to ask when you impose binrng are you giving command the number of bins? If I want 20 bins it will be binrng=1:20 ?
My pleasure.
‘If I want 20 bins it will be binrng=1:20 ?’
Yes. Just change the ‘binrng’ assignment to that, assign your data as ‘d1’ and ‘d2’ (duplicating the assignment for the purposes of plotting it), and you can run my code without any further changes, unless you also want to change the colours of the bars.
Okay, Thanks Strider, It worked perfectly!
My pleasure.
Wesser
Wesser on 8 Jun 2021
I know this is an old question, but can you do something similar if d1 and d2 are different length vectors? I also want to stack histograms, but each histogram does not have the same number of data points.
Thanks!
The lengths of the vectors should not matter, so long as they are both column vectors.
Example —
d1 = randi(9, 50, 1); % Create Data
d2 = randi(9, 90, 1); % Create Data
binrng = 1:9; % Create Bin Ranges
counts1 = histc(d1, binrng); % Histogram For ‘d1’
counts2 = histc(d2, binrng); % Histogram For ‘d2’
counts3 = counts1 + counts2; % Histogram Sum ‘d1’+‘d2’
figure(1)
bar(binrng, counts3, 'b')
hold on
bar(binrng, counts1, 'y')
hold off
legend('Data 1', 'Data 2')
.
Wesser
Wesser on 9 Jun 2021
Thanks!
My pleasure!
Jordan
Jordan on 15 Jul 2021
Hi, I know this is an old question too. But what if there are 6 separate vectors I want stacked? I can ask it as a new question if you would prefer that. Thanks!
That’s a bit ambiguous.
Perhaps:
v1 = randi(9,1,50);
v2 = randi(9,1,50);
v3 = randi(9,1,50);
v4 = randi(9,1,50);
v5 = randi(9,1,50);
v6 = randi(9,1,50);
vm = [v1; v2; v3; v4; v5; v6];
binrng = 1:9;
for k = 1:size(vm,1)
counts(k,:) = histc(vm(k,:), binrng);
end
figure
bar(binrng,counts,'stacked')
grid
Experiment, if necessary, to get different results.
.
Make sure to use histc!
MatLab recommended using histcounts instead but this will not work because histcounts yields one less value than #bins for whatever reason.

Sign in to comment.

More Answers (0)

Categories

Tags

Community Treasure Hunt

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

Start Hunting!