MATLAB bar documentation陈述如下:
bar(...,'style')指定条形的样式。 'style'是'分组'或'堆叠'。默认显示模式为“分组”。
但是,我希望同时实现两者。让我举一个例子来详细说明:
Y = [1.0 0.5 0.7
2.0 1.5 2.0
5.0 4.0 5.0
4.0 4.0 4.5
3.0 2.0 2.0];
bar(Y,'group');
此代码生成以下分组条形图,其中5个不同的3个条组合在一起:
bar([repmat(0.5,5,1) Y(:,1)-0.5],'stack');
此代码仅使用上面定义的矩阵Y
的第一列生成以下堆积条形图:
我想合并这两个,以获得一个同时分组和堆叠的条形图。因此,期望的结果将像第一张图片一样,并且一组中的三个条中的每一个将像第二张图片那样堆叠。
答案 0 :(得分:7)
我无法让BAR为您绘制组合分组/堆积条形图。但是,您可以通过向Y
数据添加零行来自行完成,只需要将条形图组分开,然后相应地修改x轴tick marks和tick labels。这是一个例子:
>> Y = [1 2 3; ... %# Sample data
2 3 4; ...
3 4 5; ...
4 5 6; ...
5 6 7; ...
6 7 8; ...
7 8 9; ...
8 9 10; ...
9 10 11];
>> newY = reshape([reshape(Y,3,[]); zeros(1,numel(Y)/3)],[],3) %# Add zeroes
%# for spacing
newY =
1 2 3
2 3 4
3 4 5
0 0 0 %# <--- Note zero rows
4 5 6
5 6 7
6 7 8
0 0 0
7 8 9
8 9 10
9 10 11
0 0 0
>> bar(newY,'stacked'); %# Create a stacked histogram
>> set(gca,'XLim',[0 12],'XTick',2:4:10,'XTickLabel',1:3); %# Modify axes
这是最终的数字:
答案 1 :(得分:4)
group vs stacked是一种或两种类型的信息。你需要有创意去做你想做的事情:
bar(Y,'stacked','BarWidth',0.3);
hold;
X = Y.*abs(randn(5,3));
bar(X,'stacked','BarWidth',0.3, 'Xdata', 1.3:1:5.3);
Z = Y.*abs(randn(5,3));
bar(X,'stacked','BarWidth',0.3, 'Xdata', 0.7:1:4.7);
快速纲要:从堆叠数据开始,确保barwidth
小到足以将数据正确地拟合到图表中,保持绘图,然后添加带有数据偏移的其他条形图({{1} })。
答案 2 :(得分:2)
我发现这个功能非常实用且易于定制。我相信它为分组和堆积条形图问题提供了另一种优雅的解决方案。
http://www.mathworks.com/matlabcentral/fileexchange/32884-plot-groups-of-stacked-bars