您可以使用unique
和histc
函數來獲取唯一值和頻率計數,然後使用bar
中的'stacked'
選項繪製數據。請注意,在下面,我已將level
和age
作爲列向量。我還將代碼的核心部分作爲一般而不是這個特定的例子。
level=[8,8,8,9,9,9,9]'; %'#SO code formatting
age=[10,11,11,10,11,11,11]'; %'
%#get unique values and frequency count
uniqLevel=unique(level);
freqLevel=histc(level,uniqLevel);
uniqAge=unique(age);
%#combine data in a manner suitable for bar(...,'stacked')
barMatrix=cell2mat(arrayfun(@(x)histc(age(level==uniqLevel(x)),uniqAge),...
1:numel(uniqLevel),'UniformOutput',false));
%#plot the stacked bars and customize
hb=bar(barMatrix','stacked'); %'
set(gca,'xticklabel',uniqLevel,'ytick',1:max(sum(barMatrix)))
set(hb(uniqAge==10),'facecolor','green')
set(hb(uniqAge==11),'facecolor','red')
xlabel('Level')
ylabel('Occurrence')
legend('10','11','location','northwest')
+1不錯的使用ACCUMARRAY的。我通過在HISTC調用中不對硬編碼值[10 11]進行硬編碼,而是使用'uniqAge = unique(data(:,2));'來使代碼更一般化。此外,這裏還需要傳說:'legend(strtrim(cellstr(num2str(uniqAge,'Age%d'))),'Location','NorthWest')' – Amro
@Amro:好的建議。我已經相應地更新了代碼。 – gnovice