使用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("分组与堆叠混合统计图")