MATLAB如何绘制堆叠柱状图(stack)并更改所有子柱的颜色

更新时间:2023-06-18 23:26:15 阅读: 评论:0

MATLAB如何绘制堆叠柱状图(stack)并更改所有⼦柱的颜⾊希望做出来的图如下,即不同组的堆叠柱状图,并能调节每个⼦柱的颜⾊:
contrasted
以下是我的思路:
第⼀步,学会绘制不同颜⾊⼦柱的堆叠柱状图:
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是柱形图的宽,可以更改
t(b(1),'facecolor',color_matrix((i-1)*2+1,:))
t(b(2),'facecolor',color_matrix((i-1)*2+2,:))
end
box on
t(gca,'XTick',[]);
t(gca,'XLim',[0 5]);
t(gca,'YLim',[0 55]);
ylabel('Percentage (%)')
怪兽大学人物名字
xlabel('Irrigation area')
t(gca,'FontSize',15,'Fontname', 'Arial');
细⼼的读者应该会发现有⼀⾏代码⽐较怪:
b = bar(i:i+1,[X(i,:);0,0],0.75,'stacked');  %0.75是柱形图的宽,可以更改
本来说好⼀个个添加,为什么⼀次加两个,⽽且是加⼀个[0,0]进去??
孕妇可以喝绿茶
原因在于,以第⼀个柱⼦(X(1,:) = [15.93,17.56])为例:如果我直接写
bar(1,X(1,:),0.75,'stacked');
得到的图会变成:
问题出在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,:));
elif mod(i,5) == 2
b = bar(i,Y(i),0.75,'FaceColor',color_matrix(2,:),'EdgeColor',color_matrix(1,:));
elif mod(i,5) == 3
b = bar(i,Y(i),0.75,'FaceColor',color_matrix(3,:),'EdgeColor',color_matrix(1,:));
elif mod(i,5) == 4
b = bar(i,Y(i),0.75,'FaceColor',color_matrix(4,:),'EdgeColor',color_matrix(1,:));
elif mod(i,5) == 0
b = bar(i,Y(i),0.75,'FaceColor',color_matrix(4,:),'EdgeColor',color_matrix(1,:));
end
end
内容策划box on
wps怎么用t(gca,'XTick',[]);
t(gca,'XLim',[0 15]);
t(gca,'YLim',[0 55]);
ylabel('Percentage (%)')
t(gca,'FontSize',15,'Fontname', 'Arial');
color_matrix = [1,0,0
1,0.38,0.27
1,0.84,0
俄罗斯音乐家
1,1,0
0.19,0.80,0.19
0.67,1,0.18
经典童谣
0,0,1
0,0.75,1];
X= [15.93,17.56;17.20,13.26;27.56,14.10;32.89,14.47];
for i = 1:4
b = bar(i+5:i+6,[X(i,:);0,0],'stacked');
t(b(1),'facecolor',color_matrix((i-1)*2+1,:))
t(b(2),'facecolor',color_matrix((i-1)*2+2,:))
end
思路说来也简单:
仍然是⼀个个添加柱⼦,提前将想要颜⾊的RGB值存到矩阵中,⽐如我存到了color_matrix 中,四种灰⾊。为了有明显空位来标明不同组别,每到第五个或者能被五整除的柱⼦时,由于柱⼦⾼度是0,就会出现空位,这也是我为什么在x1 x2 x3都加了个0进去作为他们的第五元素。
现在就可以开始依次判定,根据位置赋予颜⾊
同时最后再给第6、7、8、9柱⼦的⼦柱赋上不同颜⾊,⽅法同第⼀步
Finish!
祝⼤家2020年元旦快乐!

本文发布于:2023-06-18 23:26:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/986722.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:柱状图   空位   判定   发现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图