堆积条形图Matlab

C. *_*eed 6 matlab plot bar-chart stackedbarseries

说我的数据如下:

 level,age
     8,10
     8,11
     8,11
     9,10
     9,11
     9,11
     9,11
Run Code Online (Sandbox Code Playgroud)

我想在Matlab中形成一个堆积条形图,其中"水平"在x轴上,该水平的出现次数(频率)在y轴上:所以8的y值为3而且,我希望将它作为叠加条形图,因此8级将有1个单位为绿色(绿色为10岁)和2个单位为红色(红色为年龄) 11)和9将有1个单位的绿色和3个单位的红色.

谢谢你的帮助!

gno*_*ice 5

您可以使用ACCUMARRAY函数以相当紧凑和通用的方式执行此操作,例如,data您的7 x 2样本数据矩阵在哪里:

ageValues = unique(data(:,2));          %# Vector of unique age values
barData = accumarray(data(:,1),data(:,2),[],@(x) {hist(x,ageValues)});
X = find(~cellfun('isempty',barData));  %# Find x values for bars
Y = vertcat(barData{:});                %# Matrix of y values for bars
hBar = bar(X,Y,'stacked');              %# Create a stacked histogram
set(hBar,{'FaceColor'},{'g';'r'});      %# Set bar colors
legend(cellstr(num2str(ageValues)),'Location','NorthWest');  %# Add a legend
Run Code Online (Sandbox Code Playgroud)

请注意,在倒数第二行中{'g';'r'}传递给函数SET的颜色单元格数组应该具有相同数量的元素ageValues才能正常工作.

这是结果条形图:

在此输入图像描述

  • +1很好地使用ACCUMARRAY.通过不对HISTC调用中的值[[10 11]`进行硬编码,而不是使用`uniqAge = unique(data(:,2));`,我会使代码更通用.这里也需要传说:`legend(strtrim(cellstr(num2str(uniqAge,'Age%d'))),'Location','NorthWest')` (3认同)