如何在 MATLAB 中使用分组和堆叠样式创建条形图? [英] How can I create a barseries plot using both grouped and stacked styles in MATLAB?

查看:168
本文介绍了如何在 MATLAB 中使用分组和堆叠样式创建条形图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

MATLAB 为您绘制组合分组/堆叠条形图.但是,您可以通过将零行添加到您的 Y 数据中您想要分隔条组的任何位置,然后修改 x 轴 刻度线相应地勾选标签.举个例子:

<代码>>>Y = [1 2 3;...  %# 样本数据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) %# 添加零%# 用于间距新Y =1 2 32 3 43 4 50 0 0 %# <--- 注意零行4 5 65 6 76 7 80 0 07 8 98 9 109 10 110 0 0>>酒吧(新Y,'堆叠');%# 创建堆叠直方图>>set(gca,'XLim',[0 12],'XTick',2:4:10,'XTickLabel',1:3);%# 修改坐标轴

这是结果图:

The MATLAB bar documentation states the following:

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

However, I would like to achieve both at the same time. Let me elaborate by giving an example:

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

This code produces the following grouped barseries plot, with 5 different sets of 3 bars grouped together:

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

And this code produces the following stacked barseries plot, using just the first column of the above defined matrix Y:

I would like to merge these two, to get a barseries plot which is grouped and stacked at the same time. So the desired result would be like the first picture and each of the three bars in a set would be stacked like the second picture.

解决方案

There's no way I know of to get BAR to plot a combination grouped/stacked bar chart for you. However, you can do it yourself by adding rows of zeroes to your Y data wherever you want groups of bars to be separated, then modifying the x-axis tick marks and tick labels accordingly. Here's an example:

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

And here's the resulting figure:

这篇关于如何在 MATLAB 中使用分组和堆叠样式创建条形图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆