箱线图
自 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)')
患者的中位数年龄为 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')
为幻方的每行创建一个箱线图。每行都有相似的四分位差,但各行的中位数值不同。
boxchart(Y')xlabel('Row')ylabel('Value')
使用位置分组变量创建多个箱线图
打开实时脚本
根据地震发生的月份绘制地震的幅值。使用地震幅值向量和分组变量来表示每次地震的月份。对于每组数据,创建一个箱线图,并将其放置在 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
,其中包含由地震引起的海啸的数据。
unique(tsunamis.Cause)
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')
请注意,由于月份值是数值,因此 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')
对数据分 bin 以创建分组变量
打开实时脚本
根据年龄对医疗患者进行分组,并为每个年龄组创建一个关于舒张压值的箱线图。
加载 patients
数据集。Age
和 Diastolic
变量包含 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')
使用位置和颜色分组变量
打开实时脚本
使用两个分组变量对数据进行分组,并对生成的箱线图进行定位和着色。
加载示例文件 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
在此图中,您可以轻松比较某个特定月份在多个年份中的温度分布情况。例如,您可以看到 2016 年 2 月的气温变化比 2015 年大得多。
在箱线图上绘制均值
打开实时脚本
创建箱线图,并使用 hold on
在箱线图上绘制均值。
加载 patients
数据集。将 SelfAssessedHealthStatus
转换为有序 categorical
变量,因为 Poor
、Fair
、Good
和 Excellent
类别具有自然顺序。
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"])
使用缺口比较中位数
打开实时脚本
使用缺口来确定中位数值是否彼此存在显著差异。
加载 patients
数据集。根据患者的位置拆分患者数据。为每组患者创建关于体重的箱线图。指定 'Notch','on'
,这样每个箱都包括一个称为缺口的锥形着色区域。在 5% 显著性水平上,缺口不重叠的箱线图具有不同中位数。
load patientsboxchart(categorical(Location),Weight,'Notch','on')ylabel('Weight (lbs)')
在此示例中,三个缺口重叠,表明三个体重中位数没有显著差异。
指定箱线图的坐标区
打开实时脚本
使用 tiledlayout
和 nexttile
函数显示一对并排显示的箱线图。
加载 patients
数据集。将 Smoker
转换为 categorical
变量,并使用描述性的类别名称 Smoker
和 Nonsmoker
,而不是 1
和 0
。
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
更新 BoxChart
对象的颜色
打开实时脚本
创建一组用不同颜色表示的箱线图,以 BoxChart
对象的向量形式返回。使用向量更改一个箱线图的颜色。
加载 patients
数据集。将 Gender
和 Smoker
转换为 categorical
变量。指定描述性的类别名称 Smoker
和 Nonsmoker
,而不是 1
和 0
。
load patientsGender = categorical(Gender);Smoker = categorical(Smoker,logical([1 0]),{'Smoker','Nonsmoker'});
将 Gender
和 Smoker
变量合并成一个分组变量 cgroupdata
。创建箱线图,显示每个性别和吸烟状况对的舒张压水平的分布。b
是 BoxChart
对象组成的向量,每个对象对应一组数据。
cgroupdata = Gender.*Smoker;b = boxchart(Diastolic,'GroupByColor',cgroupdata)
b = 4x1 BoxChart array: BoxChart BoxChart BoxChart BoxChart
legend('Location','southeast')
使用 SeriesIndex
属性更新第三个箱线图的颜色。更新 SeriesIndex
属性会同时更改箱面颜色和离群值标记颜色。
b(3).SeriesIndex = 6;
可视化和查找离群值
打开实时脚本
基于包含许多离群值的停电数据创建一个箱线图,并通过更改 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')
该图包含许多离群值。为了更好地查看它们,抖动离群值并更改离群值标记样式。当您将 BoxChart
对象的 JitterOutliers
属性设置为 'on'
时,软件会随机对离群值标记进行水平位移,使它们不会完全重叠。离群值的值和垂直位置不变。
b.JitterOutliers = 'on';b.MarkerStyle = '.';
您现在可以更轻松地查看离群值的分布。
要查找离群值索引,请使用 isoutlier
函数。指定计算离群值的 'quartiles'
方法,以匹配 boxchart
离群值定义。使用索引创建 outliers
表,其中包含 outages
数据的子集。请注意,isoutlier
标识了 96 个离群值。
idx = isoutlier(outages.Customers,'quartiles');outliers = outages(idx,:);size(outliers,1)
ans = 96
由于显示了所有离群值,很难查看箱线图的四分位数。要检查它们,请更改 y 轴范围。
ylim([0 4e5])
输入参数
全部折叠
ydata
— 样本数据
数值向量 | 数值矩阵
样本数据,指定为数值向量或矩阵。
如果
ydata
是矩阵,则boxchart
为ydata
的每列创建一个箱线图。如果
ydata
是向量,而您没有指定 xgroupdata 或 cgroupdata,则boxchart
只创建一个箱线图。如果
ydata
是向量,并且您指定了xgroupdata
或cgroupdata
,则boxchart
会为xgroupdata
和cgroupdata
中的每个唯一值组合创建一个箱线图。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
xgroupdata
— 位置分组变量
数值向量 | 分类向量
位置分组变量,指定为数值或分类向量。xgroupdata
的长度必须与向量 ydata 的长度相同;当 ydata
是矩阵时,您无法指定 xgroupdata
。
boxchart
根据 xgroupdata
和 cgroupdata 中的唯一值组合对 ydata
中的数据进行分组。该函数为每组数据创建一个箱线图,并将每个箱线图定位在对应的 xgroupdata
值处。默认情况下,boxchart
沿垂直方向放置箱线图,并沿 x 轴显示 xgroupdata
值。您可以使用 Orientation 属性来更改箱线图的方向。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| categorical
cgroupdata
— 颜色分组变量
数值向量 | 分类向量 | 逻辑向量 | 字符串数组 | 字符向量 | 字符向量元胞数组
颜色分组变量,指定为数值向量、分类向量、逻辑向量,字符串数组、字符向量或字符向量元胞数组。cgroupdata
必须与向量 ydata 具有相同的长度;当 ydata
是矩阵时,无法指定 cgroupdata
。
boxchart
根据 xgroupdata 和 cgroupdata
中的唯一值组合对 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 是中位数,IQR 是四分位差,n 是数据点数,不包括
NaN
值。
提示
使用数据提示浏览
BoxChart
对象中的数据。某些选项在实时编辑器中不可用。您可以向
BoxChart
对象添加两种类型的数据提示:一种用于每个箱线图,另一种用于每个离群值。点击箱线图上的任何位置,常规数据提示都会出现在最大非离群值处。注意
显示的
Num Points
值包括对应 ydata 中的NaN
值,但boxchart
在计算箱线图统计量之前会丢弃NaN
值。您可以使用 datatip 函数向
BoxChart
对象添加更多数据提示,但数据提示的索引与其他图不同。boxchart
首先为箱线图分配索引,然后为离群值分配索引。例如,如果BoxChart
对象b
显示两个箱线图和一个离群值,datatip(b,'DataIndex',3)
会在离群值点处创建数据提示。
版本历史记录
在 R2020a 中推出
另请参阅
函数
- histogram
属性
- BoxChart 属性
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
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
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 简体中文
- English
- 日本 (日本語)
- 한국 (한국어)
Contact your local office