MATLAB boxchart():绘制箱型图(附带实例)
箱线图为数据样本提供汇总统计量的可视化表示。箱线图中会显示中位数、下四分位数、上四分位数、任何离群值(使用四分位差计算得出)及不是离群值的最小值和最大值。
在 MATLAB 中,利用函数 boxchart() 可以创建箱线图,其调用格式如下:
【实例 1】使用箱线图比较沿幻方矩阵的列和行的值的分布。在编辑器中编写以下程序并运行。

图 1 箱线图(1)
【实例 2】针对 patients 数据集,根据年龄对医疗患者进行分组,并为每个年龄组创建一个关于舒张压值的箱线图。其中 Age 和 Diastolic 变量包含 100 个患者的年龄和舒张压值。
在编辑器中编写以下程序并运行:

图 2 箱线图(2)
【实例 3】指定箱线图的坐标区。在编辑器中编写以下程序并运行。

图 3 指定坐标区的箱线图
在 MATLAB 中,利用函数 boxchart() 可以创建箱线图,其调用格式如下:
boxchart(ydata) % 为矩阵 ydata 的每列创建一个箱线图 % 若 ydata 是向量,则只创建一个箱线图 boxchart(xgroupdata, ydata) % xgroupdata 用于确定每个箱线图在 x 轴上的位置 % 根据 xgroupdata 中的唯一值对向量 ydata 中的数据进行分组 % 并将每组数据绘制为一个单独的箱线图,ydata 必须为向量 boxchart(__, 'GroupByColor', cgroupdata) % 使用颜色来区分箱线图
【实例 1】使用箱线图比较沿幻方矩阵的列和行的值的分布。在编辑器中编写以下程序并运行。
subplot(1,2,1) Y = magic(6); % 创建一个 6 行、6 列的幻方矩阵 boxchart(Y) % 为每列创建一个箱线图,每列都有一个相似的中位数 xlabel('Column') ylabel('Value') subplot(1,2,2) boxchart(Y') % 为每行创建一个箱线图,每行都有相似的四分位差,但中位数不同 xlabel('Row') ylabel('Value')运行程序后,输出如下图所示图形:

图 1 箱线图(1)
【实例 2】针对 patients 数据集,根据年龄对医疗患者进行分组,并为每个年龄组创建一个关于舒张压值的箱线图。其中 Age 和 Diastolic 变量包含 100 个患者的年龄和舒张压值。
在编辑器中编写以下程序并运行:
load patients % 加载 patients 数据集 subplot(1,2,1) min(Age) % 查找患者最小年龄,输出略 max(Age) % 查找患者最大年龄,输出略 binEdges = 25:5:50; % 将患者数据划分为以五年为一档的 bin bins = {'late 20s', 'early 30s', 'late 30s', 'early 40s', 'late 40s+'}; groupAge = discretize(Age, binEdges, 'categorical', bins); % 对 Age 变量中的值分 bin,并使用 bins 中的 bin 名称 boxchart(groupAge, Diastolic) % 为每个年龄组创建一个箱线图,显示患者的舒张压值 xlabel('Age Group') ylabel('Diastolic Blood Pressure') subplot(1,2,2) % 将 SelfAssessedHealthStatus 转换为有序 categorical 变量 healthOrder = {'Poor', 'Fair', 'Good', 'Excellent'}; SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus, ... healthOrder, 'Ordinal', true); % 根据患者自我评估的健康状况对患者进行分组,并找出每组患者的体重均值 meanWeight = groupsummary(Weight, SelfAssessedHealthStatus, 'mean'); boxchart(SelfAssessedHealthStatus, Weight) % 使用箱线图比较各组患者的体重 hold on plot(meanWeight, '-o') % 在箱线图上绘制体重均值 hold off legend(["Weight Data", "Weight Mean"])运行程序后,输出如下图所示图形:

图 2 箱线图(2)
【实例 3】指定箱线图的坐标区。在编辑器中编写以下程序并运行。
load patients % 将 Smoker 转换为 categorical 变量,并使用类别名称 Smoker 和 Nonsmoker,而非 1 和 0 Smoker = categorical(Smoker, logical([1 0]), {'Smoker', 'Nonsmoker'}); tiledlayout(1,2) % 创建一个 1×2 分块布局图 ax1 = nexttile; % 在分块布局图中创建第一个坐标区 ax1 boxchart(ax1, Systolic, 'GroupByColor', Smoker) % 显示两个关于收缩压值的箱线图,一个是吸烟者的,另一个是非吸烟者的 ylabel(ax1, 'Systolic Blood Pressure') legend ax2 = nexttile; % 在分块布局图中创建第二个坐标区 ax2 boxchart(ax2, Diastolic, 'GroupByColor', Smoker) % 显示两个关于舒张压值的箱线图,一个是吸烟者的,另一个是非吸烟者的 ylabel(ax2, 'Diastolic Blood Pressure') legend运行程序后,输出如下图所示图形:

图 3 指定坐标区的箱线图