2017-08-31 142 views
0

我有一些数据,我想在酒吧画。如何传说在Matlab中绘制堆积条形图组?

让说,我有两个条件一组3个的值,并在相同条件

y3 = [ 1, 1, 1; 0, 1, 2]; 
y2 = [1 , 1 ; 0, 2]; 

我知道如何使用plotBarStackGroupshttps://fr.mathworks.com/matlabcentral/fileexchange/32884-plot-groups-of-stacked-bars)建酒吧一组2个的值。

建条的代码(也许它不是最好的方法)

B = floor(rand(2,2,3)); 
B(1,:,:) = [[y2(1,:),0] ; y3(1,:)]; 
B(2,:,:) = [[y2(2,:),0] ; y3(2,:)]; 
label = {'condition 1', 'condition 2'}; 
plotBarStackGroups(B,label); 

但我想获得这样的事情bar plot I want to have

,我看到了两个问题:由团传奇(与否防止共享颜色)以及这些组不具有相同长度的事实。 我可以做两个不同的数字,但如果我能重新组合他们,我认为这是更好

+0

我不明白的第一部分你的问题(你希望每个小组都有自己的颜色组合,或者想在一个小组内使用不同的颜色?),第二部分:使用NaN将相同长度的小组填充得越小。 – Gryphon

+0

@Gryphon NaN的? Ok 我不明白“每个组别有自己的组合”和“组内的不同颜色”之间的区别 – Ccile

+0

@Cclie在每组上方的图片(每个月的左右栏)都有自己的颜色组合,但每个月的组合是一样的。你想要这个还是相反的:每个飞蛾有独特的组合,而每个月有两个酒吧有相同的? – Gryphon

回答

1

如果我正确地得到了你的问题

vals = {rand(3,3) rand(4,3)}; %sample data 
max_len = max(cellfun(@(x) size(x,1), vals)); 
pad_vals = cellfun(@(x) cat(1,x,nan(max_len-size(x,1),size(x,2))), vals, 'un',0); 
pad_vals = cat(3,pad_vals{:}); 
figure, 
subplot(1,2,1), bar(vals{1},'stacked'), set(gca,'Ylim',[0 3]), 
subplot(1,2,2),bar(vals{2},'stacked'), set(gca,'Ylim',[0 3]) 
%I slightly modified plotBarStackGroups to output bar handles 
h=plotBarStackGroups(permute(pad_vals,[1 3 2]),{'1','2','3','4'}) %reorder the matrix according to the function needs 
cgroup={'r','m','y';'k','b','c'}; 
cgroup=cgroup'; h=h'; % For comfortable iteration 
for k=1:numel(h), 
    set(h(k),'Facecolor',cgroup{k}), 
end 
legend({'1','2','3','4','5','6'}) 

Plot data sets separately Plot data sets together

+0

我试图修改这段代码,我想知道'''un',0'是什么。 – Ccile

+1

它相当于cellfun(@(x){somefun(x)},cell_array)或者cellfun(@(x)somefun(x),cell_array,'UniformOutput',false) - 指示cellfun输出一个单元阵列与输入相同。 cellfun的作者和我一样懒,他只检查了可选参数的两个第一个字符 – Gryphon