首页 > 编程笔记 > MATLAB笔记 阅读:29

MATLAB boxchart():绘制箱型图(附带实例)

箱线图为数据样本提供汇总统计量的可视化表示。箱线图中会显示中位数、下四分位数、上四分位数、任何离群值(使用四分位差计算得出)及不是离群值的最小值和最大值。

在 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 指定坐标区的箱线图

相关文章