本节介绍用于分类对比与分布展示的图形命令:bar 与 barh 表示离散类别的数值高低;pie 表示各部分占整体的比例;histogram 将连续数据分箱并统计频数。连续变化过程通常用折线图;分组得分、计数等离散类别数据则更适合柱状图。

柱状图:bar

下面用五组竞赛得分画柱状图:每个数对应一根柱,并用组别名称作为横轴刻度。

scores = [78 92 85 63 88];
groups = {'第一组','第二组','第三组','第四组','第五组'};
bar(scores)
set(gca, 'XTickLabel', groups)
ylabel('得分')
title('小组竞赛得分')

若不设置 XTickLabel,横轴默认是 1、2、3… 的序号。gca 表示当前坐标区;set(gca, 'XTickLabel', groups) 把刻度文字换成类别名称。柱高对应 scores 中的数值,便于比较各组高低。

水平柱状图:barh

当类别名称较长、横轴不便排列时,可使用水平柱状图 barh,名称沿纵轴展开:

scores = [78 92 85 63 88];
groups = {'第一组','第二组','第三组','第四组','第五组'};
barh(scores)
set(gca, 'YTickLabel', groups)
xlabel('得分')
title('小组竞赛得分')

数值改由横轴表示,因此轴标签应写在 xlabel 上,而不是 ylabel。

多组数据对比

% 两行 = 两次测验,五列 = 五个小组
data = [78 92 85 63 88; 82 75 91 70 94];
bar(data)
legend('第一次', '第二次')

矩阵的每一列对应一个类别(五个小组),每一行对应一次观测(两次测验)。同一类别下多根柱并排显示,legend 按行解释各组含义。若把矩阵转置后再调用 bar,类别与观测的对应关系会对调,图意会跟着改变,绘图前应先确认哪一维表示类别。

饼图:pie

当需要展示各部分在整体中的占比、且类别不多时,可使用饼图:

parts = [30 25 20 15 10];
pie(parts)
legend({'A','B','C','D','E'})

各扇区面积与 parts 中数值成正比。类别较少且比例差异明显时较易阅读;类别过多时扇区拥挤,难以比较细小差别,宜改回柱状图。

直方图:histogram

观察一批连续数值的分布时,使用直方图将数据按区间(箱子)划分,并统计落入各箱的个数:

data = randn(1, 1000);   % 标准正态分布随机数
histogram(data, 30)      % 分成 30 个区间

柱高表示落在该区间内的样本个数,可用于判断数据集中区域与两侧拖尾。第二个参数是箱数:箱过少则形状粗糙,箱过多则柱高起伏变大、不易看出趋势。直方图统计的是连续量的分布,与 bar 按既定类别画高度不是同一类图;随机数的生成见随机数。

本节说明了 bar、barh、pie 与 histogram 的适用情形与基本用法。下一节介绍三维图形:plot3、surf、mesh 与 scatter3。