箱线图 - MATLAB boxchart - MathWorks 中国 (2024)

箱线图

自 R2020a 起

全页折叠

语法

boxchart(ydata)

boxchart(xgroupdata,ydata)

boxchart(___,'GroupByColor',cgroupdata)

boxchart(___,Name,Value)

boxchart(ax,___)

b = boxchart(___)

说明

示例

boxchart(ydata) 为矩阵 ydata 的每列创建一个箱线图。如果 ydata 是向量,则 boxchart 只创建一个箱线图。

每个箱线图显示以下信息:中位数、下四分位数和上四分位数、任何离群值(使用四分位差计算得出)以及不是离群值的最小值和最大值。有关详细信息,请参阅箱线图

示例

boxchart(xgroupdata,ydata) 根据 xgroupdata 中的唯一值对向量 ydata 中的数据进行分组,并将每组数据绘制为一个单独的箱线图。xgroupdata 确定每个箱线图在 x 轴上的位置。ydata 必须为向量,xgroupdata 必须与 ydata 长度相同。

示例

boxchart(___,'GroupByColor',cgroupdata) 使用颜色来区分箱线图。软件根据 xgroupdata(如果指定)和 cgroupdata 中的唯一值组合将向量 ydata 中的数据分组,并将每组数据绘制为一个单独的箱线图。然后,向量 cgroupdata 决定每个箱线图的颜色。ydata 必须为向量,cgroupdata 必须与 ydata 具有相同的长度。请在上述语法中的任何输入参量组合后指定 'GroupByColor' 名称-值对组参量。

示例

boxchart(___,Name,Value) 使用一个或多个名称-值对组参量指定其他图选项。例如,您可以通过指定 'Notch','on' 使用缺口来比较样本中位数。在所有其他输入参量之后指定名称-值对组参量。有关属性列表,请参阅 BoxChart 属性

示例

boxchart(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区 (gca) 中。参量 ax 可以置于上述语法中的任何输入参量组合之前。

示例

b = boxchart(___) 返回 BoxChart 对象。如果未指定 cgroupdata,则 b 包含一个对象。如果您指定它,则 b 包含一个由对象组成的向量,其中每个对象对应于 cgroupdata 中的一个唯一值。创建箱线图后,使用 b 设置箱线图的属性。有关属性列表,请参阅 BoxChart 属性

示例

全部折叠

基于向量数据创建箱线图

打开实时脚本

基于年龄向量创建一个箱线图。用箱线图来可视化年龄分布。

加载 patients 数据集。Age 变量包含 100 个患者的年龄信息。创建一个箱线图来可视化年龄分布。

load patientsboxchart(Age)ylabel('Age (years)')

箱线图 - MATLAB boxchart- MathWorks 中国 (1)

患者的中位数年龄为 39 岁,如箱内的线条所示。32 岁和 44 岁的下四分位数和上四分位数分别显示为箱的底部和顶部边缘。须线(即在框下方和上方延伸的线条)的端点对应于最年轻和最年长的患者。年龄最小的患者是 25 岁,最大的是 50 岁。数据集不包含由小圆圈表示的离群值。

您可以使用数据提示来获取数据统计的汇总。将鼠标悬停在箱线图上可查看数据提示。

基于矩阵数据创建箱线图

打开实时脚本

使用箱线图来比较沿幻方的列和行的值的分布。

创建一个包含 10 行和 10 列的幻方。

Y = magic(10)
Y = 10×10 92 99 1 8 15 67 74 51 58 40 98 80 7 14 16 73 55 57 64 41 4 81 88 20 22 54 56 63 70 47 85 87 19 21 3 60 62 69 71 28 86 93 25 2 9 61 68 75 52 34 17 24 76 83 90 42 49 26 33 65 23 5 82 89 91 48 30 32 39 66 79 6 13 95 97 29 31 38 45 72 10 12 94 96 78 35 37 44 46 53 11 18 100 77 84 36 43 50 27 59

为幻方的每列创建一个箱线图。每列都有一个相似的中位数值(在 50 附近)。但是,Y 的前五列的四分位差大于 Y 的后五列。四分位差是上四分位数(箱的上边缘)和下四分位数(箱的下边缘)之间的距离。

boxchart(Y)xlabel('Column')ylabel('Value')

箱线图 - MATLAB boxchart- MathWorks 中国 (2)

为幻方的每行创建一个箱线图。每行都有相似的四分位差,但各行的中位数值不同。

boxchart(Y')xlabel('Row')ylabel('Value')

箱线图 - MATLAB boxchart- MathWorks 中国 (3)

使用位置分组变量创建多个箱线图

打开实时脚本

根据地震发生的月份绘制地震的幅值。使用地震幅值向量和分组变量来表示每次地震的月份。对于每组数据,创建一个箱线图,并将其放置在 x 轴上的指定位置。

将一组海啸数据以表形式读入工作区中。该数据集包括关于地震以及海啸的其他原因的信息。显示表的前八行,内容包括月份列、原因列和地震幅值列。

tsunamis = readtable('tsunamis.xlsx');tsunamis(1:8,["Month","Cause","EarthquakeMagnitude"])
ans=8×3 table Month Cause EarthquakeMagnitude _____ __________________ ___________________ 10 {'Earthquake' } 7.6 8 {'Earthquake' } 6.9 12 {'Volcano' } NaN 3 {'Earthquake' } 8.1 3 {'Earthquake' } 4.5 5 {'Meteorological'} NaN 11 {'Earthquake' } 9 3 {'Earthquake' } 5.8 

创建表 earthquakes,其中包含由地震引起的海啸的数据。

ans = 8x1 cell {0x0 char } {'Earthquake' } {'Earthquake and Landslide'} {'Landslide' } {'Meteorological' } {'Unknown Cause' } {'Volcano' } {'Volcano and Landslide' }
idx = contains(tsunamis.Cause,'Earthquake');earthquakes = tsunamis(idx,:);

根据对应海啸发生的月份对地震幅值进行分组。对于每个月份,显示一个单独的箱线图。例如,boxchart 使用第四个、第五个和第八个地震幅值及其他幅值来创建第三个箱线图,该箱线图对应于第三个月。

boxchart(earthquakes.Month,earthquakes.EarthquakeMagnitude)xlabel('Month')ylabel('Earthquake Magnitude')

箱线图 - MATLAB boxchart- MathWorks 中国 (4)

请注意,由于月份值是数值,因此 x 轴标尺也是数值。

如果想采用更具描述性的月份名称,请将 earthquakes.Month 列转换为 categorical 变量。

monthOrder = ["Jan","Feb","Mar","Apr","May","Jun","Jul", ... "Aug","Sep","Oct","Nov","Dec"];namedMonths = categorical(earthquakes.Month,1:12,monthOrder);

创建与上面相同的箱线图,但使用 categorical 变量 namedMonths 代替数值月份值。x 轴标尺现在是分类值,namedMonths 中的类别顺序决定箱线图的顺序。

boxchart(namedMonths,earthquakes.EarthquakeMagnitude)xlabel('Month')ylabel('Earthquake Magnitude')

箱线图 - MATLAB boxchart- MathWorks 中国 (5)

对数据分 bin 以创建分组变量

打开实时脚本

根据年龄对医疗患者进行分组,并为每个年龄组创建一个关于舒张压值的箱线图。

加载 patients 数据集。AgeDiastolic 变量包含 100 个患者的年龄和舒张压水平值。

load patients

将患者数据分为五个年龄 bin。找出最小和最大年龄,然后将它们之间的范围划分为以五年为一档的 bin。通过使用 discretize 函数对 Age 变量中的值分 bin。使用 bins 中的 bin 名称。生成的 groupAge 变量是 categorical 变量。

min(Age)
ans = 25
max(Age)
ans = 50
binEdges = 25:5:50;bins = {'late 20s','early 30s','late 30s','early 40s','late 40s+'};groupAge = discretize(Age,binEdges,'categorical',bins);

为每个年龄组创建一个箱线图。每个箱线图显示该组内患者的舒张压值。

boxchart(groupAge,Diastolic)xlabel('Age Group')ylabel('Diastolic Blood Pressure')

箱线图 - MATLAB boxchart- MathWorks 中国 (6)

使用位置和颜色分组变量

打开实时脚本

使用两个分组变量对数据进行分组,并对生成的箱线图进行定位和着色。

加载示例文件 TemperatureData.csv,此文件包含 2015 年 1 月至 2016 年 7 月间的日均温度。将该文件读入一个表中。

tbl = readtable('TemperatureData.csv');

tbl.Month 变量转换为 categorical 变量。指定类别的顺序。

monthOrder = {'January','February','March','April','May','June','July', ... 'August','September','October','November','December'};tbl.Month = categorical(tbl.Month,monthOrder);

创建箱线图,显示每年每个月的温度分布。将 tbl.Month 指定为位置分组变量。使用 'GroupByColor' 名称-值对组参量将 tbl.Year 指定为颜色分组变量。请注意,tbl 不包含 2016 年某些月份的数据。

boxchart(tbl.Month,tbl.TemperatureF,'GroupByColor',tbl.Year)ylabel('Temperature (F)')legend

箱线图 - MATLAB boxchart- MathWorks 中国 (7)

在此图中,您可以轻松比较某个特定月份在多个年份中的温度分布情况。例如,您可以看到 2016 年 2 月的气温变化比 2015 年大得多。

在箱线图上绘制均值

打开实时脚本

创建箱线图,并使用 hold on 在箱线图上绘制均值。

加载 patients 数据集。将 SelfAssessedHealthStatus 转换为有序 categorical 变量,因为 PoorFairGoodExcellent 类别具有自然顺序。

load patientshealthOrder = {'Poor','Fair','Good','Excellent'};SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus, ... healthOrder,'Ordinal',true);

根据患者自我评估的健康状况对患者进行分组,并找出每组患者的体重均值。

meanWeight = groupsummary(Weight,SelfAssessedHealthStatus,'mean');

使用箱线图比较各组患者的体重。在箱线图上绘制体重均值。

boxchart(SelfAssessedHealthStatus,Weight)hold onplot(meanWeight,'-o')hold offlegend(["Weight Data","Weight Mean"])

箱线图 - MATLAB boxchart- MathWorks 中国 (8)

使用缺口比较中位数

使用缺口来确定中位数值是否彼此存在显著差异。

加载 patients 数据集。根据患者的位置拆分患者数据。为每组患者创建关于体重的箱线图。指定 'Notch','on',这样每个箱都包括一个称为缺口的锥形着色区域。在 5% 显著性水平上,缺口不重叠的箱线图具有不同中位数。

load patientsboxchart(categorical(Location),Weight,'Notch','on')ylabel('Weight (lbs)')

箱线图 - MATLAB boxchart- MathWorks 中国 (9)

在此示例中,三个缺口重叠,表明三个体重中位数没有显著差异。

指定箱线图的坐标区

打开实时脚本

使用 tiledlayoutnexttile 函数显示一对并排显示的箱线图。

加载 patients 数据集。将 Smoker 转换为 categorical 变量,并使用描述性的类别名称 SmokerNonsmoker,而不是 10

load patientsSmoker = categorical(Smoker,logical([1 0]),{'Smoker','Nonsmoker'});

使用 tiledlayout 函数创建一个 1×2 分块图布局。通过调用 nexttile 函数,在布局中创建第一个坐标区 ax1。在第一个坐标区中,显示两个关于收缩压值的箱线图,一个用于吸烟者,另一个用于非吸烟者。通过调用 nexttile 函数,在分块图布局中创建第二个坐标区 ax2。在第二个坐标区中,对舒张压执行同样的操作。

tiledlayout(1,2)% Left axesax1 = nexttile;boxchart(ax1,Systolic,'GroupByColor',Smoker)ylabel(ax1,'Systolic Blood Pressure')legend% Right axesax2 = nexttile;boxchart(ax2,Diastolic,'GroupByColor',Smoker)ylabel(ax2,'Diastolic Blood Pressure')legend

箱线图 - MATLAB boxchart- MathWorks 中国 (10)

更新 BoxChart 对象的颜色

打开实时脚本

创建一组用不同颜色表示的箱线图,以 BoxChart 对象的向量形式返回。使用向量更改一个箱线图的颜色。

加载 patients 数据集。将 GenderSmoker 转换为 categorical 变量。指定描述性的类别名称 SmokerNonsmoker,而不是 10

load patientsGender = categorical(Gender);Smoker = categorical(Smoker,logical([1 0]),{'Smoker','Nonsmoker'});

GenderSmoker 变量合并成一个分组变量 cgroupdata。创建箱线图,显示每个性别和吸烟状况对的舒张压水平的分布。bBoxChart 对象组成的向量,每个对象对应一组数据。

cgroupdata = Gender.*Smoker;b = boxchart(Diastolic,'GroupByColor',cgroupdata)
b = 4x1 BoxChart array: BoxChart BoxChart BoxChart BoxChart
legend('Location','southeast')

箱线图 - MATLAB boxchart- MathWorks 中国 (11)

使用 SeriesIndex 属性更新第三个箱线图的颜色。更新 SeriesIndex 属性会同时更改箱面颜色和离群值标记颜色。

b(3).SeriesIndex = 6;

箱线图 - MATLAB boxchart- MathWorks 中国 (12)

可视化和查找离群值

打开实时脚本

基于包含许多离群值的停电数据创建一个箱线图,并通过更改 BoxChart 对象的属性来更轻松地从外观上区分它们。查找离群值条目的索引。

将停电数据以表形式读入工作区中。显示表的前几行。

outages = readtable('outages.csv');head(outages)
 Region OutageTime Loss Customers RestorationTime Cause _____________ ________________ ______ __________ ________________ ___________________ {'SouthWest'} 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 {'winter storm' } {'SouthEast'} 2003-01-23 00:49 530.14 2.1204e+05 NaT {'winter storm' } {'SouthEast'} 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 {'winter storm' } {'West' } 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 {'equipment fault'} {'MidWest' } 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm' } {'West' } 2003-06-18 02:49 0 0 2003-06-18 10:54 {'attack' } {'West' } 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 {'equipment fault'} {'West' } 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 {'equipment fault'}

基于 outages.Customers 值创建一个 BoxChart 对象 b,这些值指示每次停电所影响的客户数量。boxchart 丢弃值为 NaN 的条目。

b = boxchart(outages.Customers);ylabel('Number of Customers')

箱线图 - MATLAB boxchart- MathWorks 中国 (13)

该图包含许多离群值。为了更好地查看它们,抖动离群值并更改离群值标记样式。当您将 BoxChart 对象的 JitterOutliers 属性设置为 'on' 时,软件会随机对离群值标记进行水平位移,使它们不会完全重叠。离群值的值和垂直位置不变。

b.JitterOutliers = 'on';b.MarkerStyle = '.';

箱线图 - MATLAB boxchart- MathWorks 中国 (14)

您现在可以更轻松地查看离群值的分布。

要查找离群值索引,请使用 isoutlier 函数。指定计算离群值的 'quartiles' 方法,以匹配 boxchart 离群值定义。使用索引创建 outliers 表,其中包含 outages 数据的子集。请注意,isoutlier 标识了 96 个离群值。

idx = isoutlier(outages.Customers,'quartiles');outliers = outages(idx,:);size(outliers,1)
ans = 96

由于显示了所有离群值,很难查看箱线图的四分位数。要检查它们,请更改 y 轴范围。

ylim([0 4e5])

箱线图 - MATLAB boxchart- MathWorks 中国 (15)

输入参数

全部折叠

ydata样本数据
数值向量 | 数值矩阵

样本数据,指定为数值向量或矩阵。

  • 如果 ydata 是矩阵,则 boxchartydata 的每列创建一个箱线图。

  • 如果 ydata 是向量,而您没有指定 xgroupdatacgroupdata,则 boxchart 只创建一个箱线图。

  • 如果 ydata 是向量,并且您指定了 xgroupdatacgroupdata,则 boxchart 会为 xgroupdatacgroupdata 中的每个唯一值组合创建一个箱线图。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

xgroupdata位置分组变量
数值向量 | 分类向量

位置分组变量,指定为数值或分类向量。xgroupdata 的长度必须与向量 ydata 的长度相同;当 ydata 是矩阵时,您无法指定 xgroupdata

boxchart 根据 xgroupdatacgroupdata 中的唯一值组合对 ydata 中的数据进行分组。该函数为每组数据创建一个箱线图,并将每个箱线图定位在对应的 xgroupdata 值处。默认情况下,boxchart 沿垂直方向放置箱线图,并沿 x 轴显示 xgroupdata 值。您可以使用 Orientation 属性来更改箱线图的方向。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical

cgroupdata颜色分组变量
数值向量 | 分类向量 | 逻辑向量 | 字符串数组 | 字符向量 | 字符向量元胞数组

颜色分组变量,指定为数值向量、分类向量、逻辑向量,字符串数组、字符向量或字符向量元胞数组。cgroupdata 必须与向量 ydata 具有相同的长度;当 ydata 是矩阵时,无法指定 cgroupdata

boxchart 根据 xgroupdatacgroupdata 中的唯一值组合对 ydata 中的数据进行分组。该函数为每组数据创建一个箱线图,并为具有相同 cgroupdata 值的组分配相同的颜色。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical | logical | string | char | cell

ax目标坐标区
Axes 对象

目标坐标区,指定为 Axes 对象。如果您不指定坐标区,则 boxchart 使用当前坐标区 (gca)。

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: boxchart([rand(10,4); 4*rand(1,4)],'BoxFaceColor',[0 0.5 0],'MarkerColor',[0 0.5 0]) 创建具有绿色箱和绿色离群值(如果适用)的箱线图。

此处所列的 BoxChart 属性只是一部分。有关完整列表,请参阅 BoxChart 属性

输出参量

全部折叠

b — 箱线图
BoxChart 对象的向量

箱线图,以 BoxChart 对象的向量形式返回。b 包含的每个 BoxChart 对象对应于 cgroupdata 中的一个唯一值。有关详细信息,请参阅 BoxChart 属性

详细信息

全部折叠

箱线图

箱线图为数据样本提供摘要统计量的可视化表示。对于给定数值数据,对应的箱线图显示以下信息:中位数、下四分位数和上四分位数、任何离群值(使用四分位差计算得出)以及不是离群值的最小值和最大值。

  • 每个箱内的线条表示样本中位数。您可以使用 median 函数计算中位数的值。

  • 每个箱的上边缘和下边缘分别表示上四分位数和下四分位数。顶部和底部边缘之间的距离表示四分位差 (IQR)。

    有关如何计算四分位数的详细信息,请参阅 quantile,其中上四分位数对应 0.75 分位数,下四分位数对应 0.25 分位数。

  • 离群值是指距离箱顶部或底部超过 1.5 · IQR 的值。默认情况下,boxchart 使用 'o' 符号显示每个离群值。离群值的计算方式与在 'quartiles' 方法中使用 isoutlier 函数类似。

  • 须线是延伸到每个箱的上方和下方的线条。一条须线将上四分位数与最大非离群值(不是离群值的最大数据值)相连,另一条须线将下四分位数与最小非离群值(不是离群值的最小数据值)相连。

  • 缺口有助于您比较多个箱线图中的样本中位数。当您指定 'Notch','on' 时,boxchart 函数会在每个中位数周围创建锥形着色区域。在 5% 显著性水平上,缺口不重叠的箱线图具有不同中位数。显著性水平基于正态分布假设,但对于其他分布而言,中位数比较相当稳健。

    缺口区域的顶部和底部边缘分别对应于 m+(1.57IQR)/nm(1.57IQR)/n,其中 m 是中位数,IQR 是四分位差,n 是数据点数,不包括 NaN 值。

箱线图 - MATLAB boxchart- MathWorks 中国 (16)

提示

  • 使用数据提示浏览 BoxChart 对象中的数据。某些选项在实时编辑器中不可用。

    • 您可以向 BoxChart 对象添加两种类型的数据提示:一种用于每个箱线图,另一种用于每个离群值。点击箱线图上的任何位置,常规数据提示都会出现在最大非离群值处。

      箱线图 - MATLAB boxchart- MathWorks 中国 (17)

      注意

      显示的 Num Points 值包括对应 ydata 中的 NaN 值,但 boxchart 在计算箱线图统计量之前会丢弃 NaN 值。

    • 您可以使用 datatip 函数向 BoxChart 对象添加更多数据提示,但数据提示的索引与其他图不同。boxchart 首先为箱线图分配索引,然后为离群值分配索引。例如,如果 BoxChart 对象 b 显示两个箱线图和一个离群值,datatip(b,'DataIndex',3) 会在离群值点处创建数据提示。

版本历史记录

在 R2020a 中推出

另请参阅

函数

  • histogram

属性

  • BoxChart 属性

MATLAB 命令

您点击的链接对应于以下 MATLAB 命令:

 

请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。

箱线图 - MATLAB boxchart- MathWorks 中国 (18)

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

Americas

Europe

Asia Pacific

Contact your local office

箱线图 - MATLAB boxchart
- MathWorks 中国 (2024)

References

Top Articles
Latest Posts
Article information

Author: Moshe Kshlerin

Last Updated:

Views: 5713

Rating: 4.7 / 5 (77 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Moshe Kshlerin

Birthday: 1994-01-25

Address: Suite 609 315 Lupita Unions, Ronnieburgh, MI 62697

Phone: +2424755286529

Job: District Education Designer

Hobby: Yoga, Gunsmithing, Singing, 3D printing, Nordic skating, Soapmaking, Juggling

Introduction: My name is Moshe Kshlerin, I am a gleaming, attractive, outstanding, pleasant, delightful, outstanding, famous person who loves writing and wants to share my knowledge and understanding with you.