violinplot
语法
说明
向量和矩阵数据
violinplot( 根据 xgroupdata,ydata)xgroupdata 中的唯一值对 ydata 中的数据进行分组,并将每组数据绘制为一个单独的小提琴图。xgroupdata 确定每个小提琴图沿 x 轴的位置。
violinplot(___,GroupByColor= 使用颜色来区分各个小提琴图。该函数根据 cgroupdata)xgroupdata(如果指定)和 cgroupdata 中的唯一值组合对 ydata 中的数据进行分组,并将每组数据绘制为一个单独的小提琴图。然后,向量 cgroupdata 决定每个小提琴图的颜色。ydata 必须为向量,cgroupdata 必须与 ydata 具有相同的长度。请在上述语法中的任何输入参量组合后指定颜色分组数据名称-值对组参量。
表数据
其他选项
violinplot(___, 使用一个或多个名称-值参量指定其他选项。例如,您可以指定方向和要绘制小提琴图的哪一半。Name=Value)
返回一个 v = violinplot(___)ViolinPlot 对象或由 ViolinPlot 对象组成的向量。在创建小提琴图后,使用 v 设置其属性。有关属性列表,请参阅 ViolinPlot Properties。
示例
基于患者年龄向量创建单个小提琴图。使用该小提琴图分析年龄分布。
加载 patients 数据集。Age 向量包含 100 位患者的年龄。创建一个小提琴图以可视化年龄分布。
load patients violinplot(Age) ylabel("Age (years)")

小提琴图的轮廓由概率密度函数的核密度估计值 (kde) 确定。kde 呈钟形,在垂直轴上的峰值接近 40。绘图显示 Age 中的数据近似正态分布,患者年龄中位数约为 40。
生成一个由正态分布的随机数组成的矩阵。为矩阵每列中的数据创建一个小提琴图。
ydata = randn(100,3); violinplot(ydata)

三个小提琴图具有分组标签 1、2 和 3。由于数据的随机性,各小提琴图的形状略有不同。然而,每个小提琴图都具有正态分布特有的钟形特征。
自 R2025a 起
将海啸数据集加载到一个表中。为经度和纬度变量创建小提琴图。
T = readtable('tsunamis.xlsx'); violinplot(T,["Longitude","Latitude"])

三个小提琴图具有分组标签 1、2 和 3。
生成一个由正态分布随机数组成的向量,并创建一个分组数据向量。
ydata = randn(100,1); xgroupdata = categorical(repelem(["group1";"group2";"group3"],[20,50,30]));
为 ydata 中的数据创建一组小提琴图,并按照 xgroupdata 中的唯一值进行分组。图窗中的每个小提琴图对应 xgroupdata 中的一个唯一值。
violinplot(xgroupdata,ydata)

生成两个正态分布数据向量和三个分组数据向量。
ydata1 = randn(100,1); ydata2 = randn(100,1)+5; xgroupdata1 = categorical(repelem(["group1";"group2"],[90,10])); xgroupdata2 = categorical(repelem(["group1";"group2"],[10,90])); xgroupdata3 = categorical(repelem(["group3";"group4"],[25,75]));
变量 ydata1 和 ydata2 包含均值分别为 0 和 5 的正态分布数据。xgroupdata1 和 xgroupdata2 包含相同分组标签的不同序列。xgroupdata3 包含与 xgroupdata1 和 xgroupdata2 中的分组标签不同的分组标签。
基于样本数据和分组数据创建一个表。
tbl = table(xgroupdata1,xgroupdata2,xgroupdata3, ... ydata1,ydata2,VariableNames=["X1","X2","X3","Y1","Y2"]);
使用 ydata1 中的数据创建一组叠加的小提琴图,并按照 xgroupdata1 和 xgroupdata2 进行分组。
violinplot(tbl,["X1","X2"],"Y1")

图窗显示两组叠加的小提琴图。蓝色小提琴图表示按照 xgroupdata1 分组的 ydata1 中的数据,橙色小提琴图表示按照 xgroupdata2 分组的相同数据。叠加图显示,不同分组并不会显著更改每组的中位数值。但是,它们对每组对应的小提琴图形状有明显影响。这一结果表明,每组中数据的分布受数据分组方式的影响。
使用 ydata1 中的数据(按照 xgroupdata1 分组)和 ydata2 中的数据(按照 xgroupdata3 分组)创建另一组小提琴图。
violinplot(tbl,["X1","X3"],["Y1","Y2"])

与组 1 和 2 对应的蓝色图表示 ydata1 中的数据,与组 3 和 4 对应的橙色图表示 ydata2 中的数据。绘图显示,组 3 和 4 中数据的中位数大于组 1 和 2 中数据的中位数。
生成一个由正态分布的随机数组成的向量。创建两个用于表示位置和颜色分组数据的向量。
ydata = randn(100,1); xgroupdata = categorical(repelem(["group1";"group2";"group3"],[20;50;30])); cgroupdata = categorical(repelem(["a";"b";"a";"b";"c";"d";"e"],[10;10;25;25;10;10;10]));
变量 ydata 包含均值为 0 的正态分布数据。xgroupdata 包含三个不同组的标签。cgroupdata 中的标签将 xgroupdata 中的前两组拆分为相同的两种颜色,并将 xgroupdata 中的第三组拆分为三种不同颜色。
使用 xgroupdata 作为位置分组数据、cgroupdata 作为颜色分组数据绘制 ydata 中的数据。
violinplot(xgroupdata,ydata,GroupByColor=cgroupdata)

图窗显示一组小提琴图,分别对应 xgroupdata 中的三个分组标签。组 1 和 2 的集合各包含一个橙色小提琴图和一个蓝色小提琴图。组 3 的小提琴图集合包含一个黄色小提琴图、一个紫色小提琴图和一个绿色小提琴图。
生成一个随机数向量。通过计算核密度估计值 (kde) 来估计数据的 pdf。
ydata = [randn(100,1); 6+2*randn(100,1)]; [f,xf] = kde(ydata,Bandwidth=0.6);
f 包含 kde 的值,xf 包含对应的计算点。
使用 f 作为密度值、xf 作为计算点来创建一个小提琴图。小提琴图的形状显示数据具有双峰特征。
violinplot(EvaluationPoints=xf,DensityValues=f)

创建两个由随机生成数据组成的向量。创建两个由位置分组数据组成的向量。
ydata1 = randn(100,1); ydata2 = [randn(25,1)+2;randn(75,1)+5]; xgroupdata1 = repelem([1;2],[50;50]); xgroupdata2 = repelem([1;2],[25;75]);;
变量 ydata1 和 ydata2 包含随机生成的数据。xgroupdata1 和 xgroupdata2 包含两个相同分组标签的不同序列。
比较根据 xgroupdata1 中标签分组的 ydata1 中的数据与根据 xgroupdata2 中标签分组的 ydata2 中的数据。对于每个组,创建一个水平小提琴图,其中 ydata1 中的数据以上半部分表示,ydata2 中的数据以下半部分表示。
violinplot(xgroupdata1,ydata1,Orientation="horizontal",DensityDirection="positive") hold on violinplot(xgroupdata2,ydata2,Orientation="horizontal",DensityDirection="negative") legend("ydata1","ydata2")

这些小提琴图显示,对于每个组,ydata1 和 ydata2 的数据近似正态分布,并且 ydata1 的数据均值小于 ydata2 的数据均值。此外,ydata2 的数据在组 2 中的均值大于在组 1 中的均值。
根据患者数据创建小提琴图,以比较吸烟者和非吸烟者的血压。绘图显示吸烟者的收缩压和舒张压高于非吸烟者。
加载 patients 数据集。将 Smoker 转换为 categorical 变量,并使用描述性的类别名称 Smoker 和 Nonsmoker,而不是 1 和 0。
load patients Smoker = categorical(Smoker,logical([1 0]),["Smoker","Nonsmoker"]);
使用 tiledlayout 函数创建一个 1×2 分块图布局。通过调用 nexttile 函数,创建第一个坐标区 ax1。在第一个坐标区中,显示两个表示收缩压值的小提琴图,一个用于吸烟者,另一个用于非吸烟者。通过调用 nexttile 函数,在分块图布局中创建第二个坐标区 ax2。在第二个坐标区中,对舒张压执行同样的操作。
tiledlayout(1,2) % Left axes ax1 = nexttile; violinplot(ax1,Systolic,GroupByColor=Smoker) ylabel(ax1,'Systolic Blood Pressure') legend("Smoker","Nonsmoker") % Right axes ax2 = nexttile; violinplot(ax2,Diastolic,GroupByColor=Smoker) ylabel(ax2,"Diastolic Blood Pressure") legend("Smoker","Nonsmoker")

加载 patients 数据集,并将 Smoker 变量转换为 categorical。
load patients Smoker = categorical(Smoker,logical([1 0]),["Smoker","Nonsmoker"]);
变量 Diastolic 和 Smoker 包含患者舒张压和是否为吸烟者的数据。
为 Diastolic 中的数据创建一组小提琴图,并按照 Smoker 进行分组。
v = violinplot(Diastolic,GroupByColor=Smoker)
v =
1×2 ViolinPlot array:
ViolinPlot ViolinPlot
v 是一个包含两个 ViolinPlot 对象的数组。您可以通过指定 v 中 ViolinPlot 对象的属性来修改小提琴图。有关详细信息,请参阅ViolinPlot Properties。
更新小提琴图的颜色,使吸烟者的图为粉色,非吸烟者的图为绿色。
v(1).FaceColor = [1 0 1]; % Pink v(2).FaceColor = [0 1 0]; % Green legend("Smoker","Nonsmoker")

输入参数
样本数据,指定为数值向量或矩阵。
如果
ydata是矩阵,则violinplot为ydata的每列创建一个小提琴图。如果
ydata是向量,而您没有指定xgroupdata或cgroupdata,则violinplot只创建一个小提琴图。如果
ydata是向量并且您指定xgroupdata或cgroupdata,则violinplot为xgroupdata和cgroupdata中的每个唯一值组合创建一个小提琴图。
数据类型: single | double
位置分组数据,指定为数值或分类向量,或者数值或分类矩阵。
如果 ydata 是长度为 n 的向量,则 xgroupdata 必须是长度为 n 的向量或具有 n 行的矩阵。
如果 ydata 是矩阵,则 xgroupdata 必须为大小相同的矩阵,或为长度等于 ydata 中行数或列数的向量。
violinplot 根据 xgroupdata 和 cgroupdata 中的唯一值组合对 ydata 中的数据进行分组,并为每个组创建一个小提琴图。默认情况下,violinplot 沿垂直方向放置小提琴图,并沿 x 轴显示 xgroupdata 值。您可以使用 Orientation 属性来更改小提琴图的方向。
数据类型: single | double | categorical
颜色分组数据,指定为数值向量、分类向量、逻辑向量,字符串数组、字符向量或字符向量元胞数组。cgroupdata 必须与向量 ydata 具有相同的长度;当 ydata 或 xgroupdata 是矩阵时,无法指定 cgroupdata。
violinplot 按照 xgroupdata 和 cgroupdata 中的唯一值组合对 ydata 中的数据进行分组。该函数为每组数据创建一个小提琴图,并为具有相同 cgroupdata 值的组分配相同的颜色。
数据类型: single | double | categorical | logical | string | char | cell
包含要绘制的数据的源表,指定为表或时间表。
包含位置分组数据的表变量,指定为一个或多个表变量索引。您指定的表变量必须包含数值、分类、日期时间或持续时间值。
指定表索引
使用以下任一索引方案指定预期的一个或多个变量。
| 索引方案 | 示例 |
|---|---|
变量名称:
|
|
变量索引:
|
|
变量类型:
|
|
绘制您的数据
要仅绘制一组小提琴图,请为 xvar 和 yvar 分别指定一个变量。例如,使用一个分类分组变量和两个包含正态分布随机值的变量创建一个表。根据 X 中的数据分组绘制 Y1 中的数据。
X = categorical(repelem(["a1";"b1"],50)); Y1 = randn(100,1); Y2 = 5*randn(100,1)+10; tbl = table(X,Y1,Y2); violinplot(tbl,"X","Y1")
要一起绘制多个数据集,请为 xvar、yvar 或两者指定多个变量。如果为两个参量都指定多个变量,则每个参量的变量数目必须相同。
例如,使用 X 作为分组变量基于 Y1 中的数据创建一组小提琴图,并使用 Y2 作为数据创建一组小提琴图。
violinplot(tbl,"X",["Y1","Y2"])
您也可以对 xvar 和 yvar 使用不同索引方案。例如,将 xvar 指定为变量名称,将 yvar 指定为索引编号。
violinplot(tbl,"X",3)包含样本数据的表变量,指定为一个或多个表变量索引。您指定的表变量必须包含数值、分类、日期时间或持续时间值。
指定表索引
使用以下任一索引方案指定预期的一个或多个变量。
| 索引方案 | 示例 |
|---|---|
变量名称:
|
|
变量索引:
|
|
变量类型:
|
|
绘制您的数据
要仅绘制一组小提琴图,请为 xvar 和 yvar 分别指定一个变量。例如,使用两个分类分组变量和一个包含正态分布随机值的变量创建一个表。根据 X1 中的数据分组绘制 Y 中的数据。
X1 = categorical(repelem(["a1";"b1"],50)); X2 = categorical(repelem(["a2";"b2";"c2"],[33,33,34])); Y = randn(100,1); tbl = table(X1,X2,Y); violinplot(tbl,"X1","Y")
要一起绘制多个数据集,请为 xvar、yvar 或两者指定多个变量。如果为两个参量都指定多个变量,则每个参量的变量数目必须相同。
例如,使用 X1 作为分组变量基于 Y 中的数据创建一组小提琴图,并使用 X2 作为分组变量创建一组小提琴图。
violinplot(tbl,["X1","X2"],"Y")
您也可以对 xvar 和 yvar 使用不同索引方案。例如,将 xvar 指定为变量名称,将 yvar 指定为索引编号。
violinplot(tbl,"X1",3)概率密度函数 (pdf) 的计算点,指定为以下值之一:
数值向量 - 使用
evalPts中的计算点和densVals中的 pdf 值创建单个小提琴图。数值矩阵 - 创建多个小提琴图。每个小提琴图表示
evalPts的一列中的计算点和densVals的对应列中的 pdf 值。
如果您指定 evalPts,则必须同时指定 densVals,并且它们的大小必须相同。
数据类型: single | double
pdf 的值,指定为以下值之一:
数值向量 - 使用
evalPts中的计算点和densVals中的 pdf 值创建单个小提琴图。数值矩阵 - 创建多个小提琴图。每个小提琴图表示
evalPts的一列中的计算点和densVals的对应列中的 pdf 值。
如果您指定 densVals,则必须同时指定 evalPts,并且它们的大小必须相同。
数据类型: single | double
目标坐标区,指定为 Axes 对象。如果您不指定坐标区,则 violinplot 使用当前坐标区 (gca)。
名称-值参数
将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
示例: violinplot(ydata,Orientation="horizontal",DensityDirection="negative") 使用 ydata 中的数据绘制水平小提琴图的下半部分。
注意
此处所列的 ViolinPlot 属性只是一部分。有关完整列表,请参阅 ViolinPlot Properties。
小提琴图最大宽度,指定为正标量。DensityWidth 与由 xgroupdata 或 xvar 指定的位置分组数据具有相同的单位。
示例: DensityWidth=0.5
数据类型: single | double
绘制完整或一半小提琴图,指定为下表中的值之一。
| 值 | 描述 |
|---|---|
"both" | 绘制小提琴图的两个“半部分”。 |
"positive" | 绘制小提琴图的正半部分,具体取决于
|
"negative" | 绘制小提琴图的负半部分,具体取决于
|
示例: DensityDirection="negative"
数据类型: string | char
标准化小提琴图的方法,指定为下表中的值之一。
| 值 | 描述 |
|---|---|
"area" | 各小提琴图具有相等的面积。 |
"width" | 小提琴图的宽度等于 DensityWidth。 |
"count" | 小提琴图的宽度与每组中数据点的数量成正比。 |
示例: DensityScale="count"
数据类型: string | char
小提琴图的方向,指定为 "vertical" 或 "horizontal"。默认情况下,小提琴图具有垂直方向,以便小提琴图与 y 轴对齐。无论方向如何,violinplot 都将样本数据存储在 ViolinPlot 对象的 YData 属性中。
示例: Orientation="horizontal"
数据类型: string | char
自 R2025a 起
颜色分组布局,指定为 "grouped" 或 "overlaid"。默认情况下,每个颜色分组中的小提琴图并排绘制。
如果指定了 ColorGroupLayout="overlaid",则:
每个颜色分组中的小提琴图叠加绘制。
函数忽略
ColorGroupWidth的值。您可以通过指定
DensityWidth来调整每个叠加颜色分组之间的空间。
数据类型: string | char
输出参量
小提琴图,以 ViolinPlot 对象或 ViolinPlot 对象向量形式返回。
如果您将
ydata指定为矩阵,则violinplot为每列返回一个对象。如果您指定
tbl,则violinplot为xvar或yvar中的每个索引(以元素较多者为准)返回一个对象。如果您指定
cgroupdata,则violinplot为每组返回一个对象。
在创建小提琴图后,使用 v 设置其属性。有关属性列表,请参阅 ViolinPlot Properties。
详细信息
小提琴图直观地显示了数据样本的经验分布。小提琴图的形状是由概率密度函数 (pdf) 的核密度估计值 (kde) 绕垂直轴对称绘制而成的。
版本历史记录
在 R2024b 中推出您可以从表和时间表数据创建小提琴图,而无需指定分组变量。使用新语法 violinplot(tbl,yvar) 从表 tbl 中的 yvar 变量创建小提琴图。
如果您指定向量输入数据,您可以将位置分组数据指定为矩阵。例如,在语法 violinplot(xgroupdata,ydata) 中,如果 ydata 是长度为 n 的向量,则您可以将 xgroupdata 指定为具有 n 行的矩阵。
您可以使用以下名称-值参量自定义颜色分组的宽度和布局:
ColorGroupWidth- 调整每个小提琴图颜色分组之间的空间。ColorGroupLayout- 指定是对每个颜色分组中的小提琴图进行分组还是叠加。DensityWidth- 调整每个叠加颜色分组之间的空间。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)