在MATLAB中具有多级分组的分组条形图

时间:2018-01-22 09:09:49

标签: matlab bar-chart matlab-figure

我想制作一个具有多个分组级别的分组条形图,如下所示 -

enter image description here

我想拥有角色' AR'在图中。图表的数据附在帖子上。

Col1    Col2    Col3    Col4

AR                      1
AR      1100    0.5     2
AR      1100    1       3
5       1000    0.5     4
5       1000    1       5
5       1050    0.5     4
5       1050    1       5
5       1100    0.5     4
5       1100    1       5
15      1000    0.5     4
15      1000    1       5
15      1050    0.5     4
15      1050    1       5
15      1100    0.5     4
15      1100    1       5

第1列至第3列的数据应用于X轴的分组和第4列的数据,以用于柱的高度。

是否可以为分组添加前缀或后缀,如0.5h或1000 C或5%?

2 个答案:

答案 0 :(得分:0)

好吧,在没有任何其他答案的情况下,我会发布我的尝试(在Octave完成)。它并不完美,但它是我能做的最好的事情。我将您的数据放在*.csv文件中:

enter image description here

我必须为每个栏创建一个XTickLabel。此外,由于csvread仅导入数字数据,因此我必须手动调整前3个条形的XTickLabel。可能有更好,更聪明的方法来做到这一点:

data = csvread('data.csv');
data_str = cell(size(data,1),1);  

for k=1:size(data,1)
  if k<=3
    data_str{k} = sprintf([num2str(data(k,3)) '\n' num2str(data(k,2)) '\nAR']);
  else
    data_str{k} = sprintf([num2str(data(k,3)) '\n' num2str(data(k,2)) '\n' num2str(data(k,1))]);
  end
end
data_str{1} = sprintf(['' '\n' '' '\nAR']);

figure 
hold on
h1 = bar(1:2:size(data,1),data(1:2:end,4));
set(h1,'FaceColor','g','BarWidth',0.4)
legend('D','Location','NorthEast')
h2 = bar(2:2:size(data,1),data(2:2:end,4));
set(h2,'FaceColor','b','BarWidth',0.4)
set(gca,'XTick',1:15)
set(gca,'XTickLabel',data_str)
xlim([0 size(data,1)+1])
ylim([0 max(data(:,4))+1])
ylabel('D')

这给出了以下结果:

enter image description here

答案 1 :(得分:0)

y = [1 2 3 4 5 4 5 4 5 4 5 4 5 4 5];

figure

% hold on

h = bar(y);

xTick = 1:15;

set(gca,'xtick',xTick);

yTick = get(gca,'ytick');

set(gca,'xticklabel',[])

xTickLabel = {{'-\newline';'-';'AR'},{'0.5h';'1100 C';'AR'},{'1h';'1100 C';'AR'},{'0.5h'; '1000C' ;'5%'},{'1h'; '1000C';'5%'},{'0.5h'; '1050C'; '5%'},{'1h'; '1050C'; '5%'},{'0.5h'; '1100C'; '5%'},{'1h'; '1100C'; '5%'},{'0.5h'; '1000C'; '15%'},{'1h'; '1000C'; '15%'},{'0.5h'; '1050C'; '15%'},{'1h'; '1050C'; '15%'},{'0.5h'; '1100C'; '15%'},{'1h'; '1100C'; '15%'}};

for k = 1:length(xTick)

    text(xTick(k),yTick(1)-0.06*(yTick(end)-yTick(1)),xTickLabel{k},'HorizontalAlignment','center')

end

最后,这是我缩小的范围,结果是 - enter image description here