2017-08-31 184 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