使用matlab中的bar函数,可以绘制出条形图

其中条形图的样式可以指定为"grouped"(分组,即不同类数据横向并列),或者是"stacked"(堆叠,即不同数据纵向堆在一起)。

clear;clc;
a = 1:5;
b = 2:6;
c = 5:-1:1;
subplot(2,1,1);
bar([a;b;c]',"grouped");
title("分组条形图");
subplot(2,1,2);
bar([a;b;c]',"stacked");
title("堆叠条形图");

画出的图像为

但是,如果想要一部分数据堆叠在一起再和另一部分数据并列的话,matlab中并没有直接给出这个功能,为此,我们可以使用hold on语句,分两次完成作图。

例如,如果想让a数据和b数据堆叠,再和c数据并列的话,可以先绘制a、b数据堆叠的条形图

bar([a;b]',"stacked","BarWidth",0.4);

"BarWidth"代表数据条的宽度,因为之后还要和c数据并列,所以这里我们宽度取0.4

之后,我们再绘制c数据的条形图

hold on
bar(c,"BarWidth",0.4,'Xdata',1.4:1:5.4);

同样的,我们把c数据的宽度也设成0.4,另外,为了让c数据条与之前画的a、b数据条不重合,我们设定c数据条的'Xdata'参数,也就是c数据条的中心位置,默认是[1, 2, 3, 4, 5],我们这里向右移动0.4(也就是a、b数据条的宽度),因此是[1.4, 2.4, 3.4, 4.4, 5.4],可以得到以下图像

发现x坐标的位置还有一些不对劲,我们可以再用下面的代码重新设置x坐标的标度位置和标签

set(gca,'XLim',[0.5 6],'XTick',1.2:1:5.2,'XTickLabel',1:5);

 其中'XLim'参数表示你要显示的坐标轴范围,'XTick'参数表示坐标刻度的位置,由于a、b数据条的中点在[1, 2, 3, 4, 5]的地方,c数据条的终点在[1.4, 2.4, 3.4, 4.4, 5.4]处,因此这里的刻度我们放在两个数据条中间,也就是[1,2, 2.2, 3.2, 4.2, 5.2],最后再设置刻度的标签(’XTickLabel'参数)为[1, 2, 3, 4, 5]

最后也可以设置图例、标注等等,得到的结果如下

 

代码段:
 

clear;close;clc;
a = 1:5;
b = 2:6;
c = 5:-1:1;
figure;
bar([a;b]',"stacked","BarWidth",0.4);
hold on
bar(c,"BarWidth",0.4,'Xdata',1.4:1:5.4);
set(gca,'XLim',[0.4 6],'XTick',1.2:1:5.2,'XTickLabel',1:5);
xlabel("X");
ylabel("y");
legend("a", "b", "c");
title("分组与堆叠混合统计图")

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐