如何在MATLAB中使用分组和堆叠样式创建条形图?

MATLAB bar documentation说明如下:

bar(…,’style’) specifies the style of the bars. ‘style’ is ‘grouped’ or ‘stacked’. Default mode of display is ‘grouped’.

但是,我想同时实现这两个目标.让我举一个例子来详细说明:

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');

此代码生成以下分组的bareries图,其中5个不同的3个条组合在一起:

bar([repmat(0.5,5,1) Y(:,1)-0.5],'stack');

并且此代码仅使用上面定义的矩阵Y的第一列生成以下堆叠条形图:

我想合并这两个,以获得一个同时分组和堆叠的bareries图.因此,期望的结果将像第一张图片一样,并且一组中的三个条中的每一个将像第二张图片那样堆叠.

最佳答案
我无法让BAR为您绘制组合分组/堆积条形图.但是,您可以通过在Y数据中添加零行来自行完成,无论您希望将条组分开,然后相应地修改x轴tick markstick 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

这是最终的数字:

转载注明原文:如何在MATLAB中使用分组和堆叠样式创建条形图? - 代码日志