希望做出来的图如下,即不同组的堆叠柱状图,并能调节每个子柱的颜色:
以下是我的思路:
第一步,学会绘制不同颜色子柱的堆叠柱状图:
figure(1)
X= [15.93,17.56;
17.20,13.26;
27.56,14.10;
32.89,14.47];
hold on
color_matrix = [1,0,0 %1号柱下部颜色
1,0.38,0.27 %1号柱上部颜色
1,0.84,0 %2号柱下部颜色
1,1,0 %2号柱上部颜色
0.19,0.80,0.19 %3号柱下部颜色
0.67,1,0.18 %3号柱上部颜色
0,0,1 %4号柱下部颜色
0,0.75,1]; %4号柱上部颜色
%一个个添加柱子,用b记录,此时调用b(i)的facecolor就可以用来修改颜色
for i = 1:4
b = bar(i:i+1,[X(i,:);0,0],0.75,'stacked'); %0.75是柱形图的宽,可以更改
set(b(1),'facecolor',color_matrix((i-1)*2+1,:))
set(b(2),'facecolor',color_matrix((i-1)*2+2,:))
end
box on
set(gca,'XTick',[]);
set(gca,'XLim',[0 5]);
set(gca,'YLim',[0 55]);
ylabel('Percentage (%)')
xlabel('Irrigation area')
set(gca,'FontSize',15,'Fontname', 'Arial');
-
细心的读者应该会发现有一行代码比较怪:
b = bar(i:i+1,[X(i,:);0,0],0.75,'stacked'); %0.75是柱形图的宽,可以更改
- 1
本来说好一个个添加,为什么一次加两个,而且是加一个[0,0]进去??
原因在于,以第一个柱子(X(1,:) = [15.93,17.56])为例:如果我直接写bar(1,X(1,:),0.75,'stacked');
- 1
得到的图会变成:
问题出在MATLAB将X(1,:) = [15.93,17.56]识别为两个组每组一个数,而不是一个组一组两个数,所以我人为添加一个[0,0]进去辅助识别,就变成了[15.93,17.56; 0,0]。反正是高度等于零的柱子,也不会显现在图上~现在清楚了吧
第二步,学会绘制多组、不同颜色子柱的堆叠柱状图:
figure(3) x1= [20.73,25.45,28.85,34.21,0]; x2= [33.4900,30.4600,41.6600,47.3600,0]; x3= [44.8400,46.95,48.72,52.6400,0]; Y= [x1,x2,x3]; hold on color_matrix = [0,0,0 0.4,0.4,0.4 0.7,0.7,0.7 0.9,0.9,0.9]; for i = 1:15 if mod(i,5) == 1 b = bar(i,Y(i),0.75,'FaceColor',color_matrix(1,:),'EdgeColor',color_matrix(1,:)); elseif mod(i,5) == 2 b = bar(i,Y(i),0.75,'FaceColor',color_matrix(2,:),'EdgeColor',color_matrix(1,:)); elseif mod(i,5) == 3 b = bar(i,Y(i),0.75,'FaceColor',color_matrix(3,:),'EdgeColor',color_matrix(1,:)); elseif mod(i,5) == 4 b = bar(i,Y(i),0.75,'FaceColor',color_matrix(4,:),'EdgeColor',color_matrix(1,:)); elseif mod(i,5) == 0 b = bar(i,Y(i),0.75,'FaceColor',color_matrix(4,:),'EdgeColor',color_matrix(1,:)); end end box on set(gca,'XTick',[]); set(gca,'XLim',[0 15]); set(gca,'YLim',[0 55]); ylabel('Percentage (%)') set(gca,'FontSize',15,'Fontname', 'Arial');