stacked two columns of four in bar3

4 views (last 30 days)
Fatemah Alghamedy
Fatemah Alghamedy on 3 Mar 2019
Answered: Sreelakshmi S.B on 7 Mar 2019
Hello there,
If I do bar3(data), I got 4 Xs and 4 Ys I want to stacked the the third and fourth column (C and D in Fig)
and keep the first and second columns normal.
I tried this code but did not work
Any one could help me please
data = [ 8.53 31.55 55.43 4.49;
8.79 21.07 40.37 29.77;
9.24 31.20 51.49 8.07;
9.39 37.74 48.01 4.86;];
plotFig = bar3(data(:,1),0.7);
hold on;
plotFig = bar3(data(:,2),0.7);
hold on;
plotFig = bar3(data(:,3:4),0.7,'stacked');
hold on;
% the basic fig
%plotFig = bar3(data,0.7);
%hold on;
namesy =["1", "2", "3", "4"];
set(gca,'ytick',[1:4],'yticklabel',namesy);
namesx =["A", "B", "C" , "D"];
set(gca,'xtick',[1:4],'xticklabel',namesx);

Answers (1)

Sreelakshmi S.B
Sreelakshmi S.B on 7 Mar 2019
From what i understand,each time bar3 is called, plotting starts from the beginning.So calling bar3 twice-one for the unstacked portions-'A' and 'B' -and the other for the stacked portions-'C' and 'D' -will result in an overlap-you'll get the latest bars and the others will be hidden.
bar3 doesn't seem to have an option to specify the offset of the column while plotting, to overcome this ,or any option to partially stack bars.
one workaround i found was to use the 'stacked_bar3' function.You can get the code and explanation for that here:
This is designed for stacking a 3D matrix but by splitting and combining your data matrix into a 3D matrix as shown below,you can make it work for your 2D matrix.
data1 = [ 8.53 31.55 55.43 ;
8.79 21.07 40.37 ;
9.24 31.20 51.49 ;
9.39 37.74 48.01];
data2 = [ 0 0 4.49;
0 0 29.77;
0 0 8.07;
0 0 4.86;];
temp=zeros(size(data1,1), size(data1,2), 2);
temp(:,:,1)=data1;
temp(:,:,2)=data2;
stacked_bar3(temp);
namesy =["1", "2", "3", "4"];
set(gca,'ytick',[1:4],'yticklabel',namesy);
namesx =["A", "B", "C" , "D"];
set(gca,'xtick',[1:4],'xticklabel',namesx);
The code given above will give you only bars 'C' and 'D' stacked as required (the tops of bars 'A' and 'B' will be coloured unnecessarily but you can probably find a way to avoid this.The origin is also shifted but that shouldn't cause any issues.)

Tags

Community Treasure Hunt

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

Start Hunting!