7

MATLAB bar 文档说明如下:

bar(...,'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

在此处输入图像描述

我想合并这两个,以获得一个同时分组和堆叠的barseries图。所以想要的结果就像第一张图片一样,一组中的三个条中的每一个都会像第二张图片一样堆叠。

4

3 回答 3

7

我不知道如何让BAR为您绘制组合的分组/堆叠条形图。但是,您可以通过将零行添加到Y数据中您想要分隔条组的任何位置自行完成,然后相应地修改 x 轴刻度线刻度线标签。这是一个例子:

>> 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

这是结果图:

在此处输入图像描述

于 2011-05-16T14:36:43.837 回答
4

组与堆叠是一种非此即彼的信息。你需要有创造力去做你想做的事:

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足够小以将数据正确地拟合到图表中,保持你的图,然后添加另一个带有数据偏移量的条形图 ( Xdata)。

在此处输入图像描述

于 2011-05-16T14:37:21.303 回答
2

我发现此功能非常有用且易于定制。我相信它为分组和堆叠条形图问题提供了另一种优雅的解决方案。

http://www.mathworks.com/matlabcentral/fileexchange/32884-plot-groups-of-stacked-bars

于 2013-08-25T22:53:59.103 回答