Bar width doesn't work
9 views (last 30 days)
Show older comments
hey
I have the following very specific problem. I try to plot 10 pars divided in 4 groups.
The first group is 4 bars de second 3 third 2 fourth 1 bar
say: x=[1:10], y=x.^2
then i want it to plot like this:
figure(1), clf(1), hold on
bar(x([1,5,8]),y([1,5,8]),'r')
bar(x([2,6]),y([2,6]),'b')
bar(x(3),y(3),'g')
bar(x([4,7,9,10]),y([4,7,9,10]),'y')
if i do this de barwidths aren't equal how do i get them to be the same width?
0 Comments
Answers (1)
Mike Garrity
on 6 Nov 2014
Edited: Mike Garrity
on 6 Nov 2014
The widths of the bars are calculated from the spacing of the XData. You could calculate backwards from the spacing to come up with a BarWidth scale factor to correct for it, but generally the simplest approach is to use the same XData for all of your bar plots. You can use nans to skip Y values when you do this.
In your case it might look something like this:
y1 = nan(size(y));
y1([1,5,8]) = y([1,5,8]);
y2 = nan(size(y));
y2([2,6]) = y([2,6]);
y3 = nan(size(y));
y3(3) = y(3);
y4 = nan(size(y));
y4([4,7,9,10]) = y([4,7,9,10]);
bar(x,y1,'r')
bar(x,y2,'b')
bar(x,y3,'g')
bar(x,y4,'y')
or this:
y1 = y;
y2 = y;
y3 = y;
y4 = y;
mask1 = [1 0 0 0 1 0 0 1 0 0];
mask2 = [0 1 0 0 0 1 0 0 0 0];
mask3 = [0 0 1 0 0 0 0 0 0 0];
mask4 = [0 0 0 1 0 0 1 0 1 1];
y1(~mask1) = nan;
y2(~mask2) = nan;
y3(~mask3) = nan;
y4(~mask4) = nan;
bar(x,y1,'r')
bar(x,y2,'b')
bar(x,y3,'g')
bar(x,y4,'y')
0 Comments
See Also
Categories
Find more on Graphics Object Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!