主要内容

violinplot

小提琴图

自 R2024b 起

    说明

    向量和矩阵数据

    violinplot(ydata) 为矩阵 ydata 的每列都创建一个小提琴图。如果 ydata 是一个向量,则 violinplot 创建一个小提琴图。

    示例

    violinplot(xgroupdata,ydata) 根据 xgroupdata 中的唯一值对 ydata 中的数据进行分组,并将每组数据绘制为一个单独的小提琴图。xgroupdata 确定每个小提琴图沿 x 轴的位置。

    示例

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

    示例

    violinplot(EvaluationPoints=evalPts,DensityValues=densVals) 使用值 densVals 和概率密度函数 (pdf) 的计算点 evalPts 创建一个小提琴图。

    示例

    表数据

    violinplot(tbl,yvar) 为表 tblyvar 中的每个变量都创建一个小提琴图。 (自 R2025a 起)

    示例

    violinplot(tbl,xvar,yvar) 根据 xvar 中的数据分组创建 yvar 中数据的小提琴图,其中 xvaryvar 是表 tbl 中的变量。要绘制一个数据集,请为 xvar 指定一个变量,为 yvar 指定一个变量。要绘制多个数据集,请为 xvaryvar 或两者指定多个变量。如果两个参量都指定多个变量,它们指定的变量数目必须相同。

    示例

    其他选项

    violinplot(___,Name=Value) 使用一个或多个名称-值参量指定其他选项。例如,您可以指定方向和要绘制小提琴图的哪一半。

    示例

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

    示例

    v = violinplot(___) 返回一个 ViolinPlot 对象或由 ViolinPlot 对象组成的向量。在创建小提琴图后,使用 v 设置其属性。有关属性列表,请参阅 ViolinPlot Properties

    示例

    示例

    全部折叠

    基于患者年龄向量创建单个小提琴图。使用该小提琴图分析年龄分布。

    加载 patients 数据集。Age 向量包含 100 位患者的年龄。创建一个小提琴图以可视化年龄分布。

    load patients
    violinplot(Age)
    ylabel("Age (years)")

    Figure contains an axes object. The axes object with ylabel Age (years) contains an object of type violinplot.

    小提琴图的轮廓由概率密度函数的核密度估计值 (kde) 确定。kde 呈钟形,在垂直轴上的峰值接近 40。绘图显示 Age 中的数据近似正态分布,患者年龄中位数约为 40。

    生成一个由正态分布的随机数组成的矩阵。为矩阵每列中的数据创建一个小提琴图。

    ydata = randn(100,3);
    violinplot(ydata)

    Figure contains an axes object. The axes object contains 3 objects of type violinplot.

    三个小提琴图具有分组标签 1、2 和 3。由于数据的随机性,各小提琴图的形状略有不同。然而,每个小提琴图都具有正态分布特有的钟形特征。

    自 R2025a 起

    将海啸数据集加载到一个表中。为经度和纬度变量创建小提琴图。

    T = readtable('tsunamis.xlsx');
    violinplot(T,["Longitude","Latitude"])

    Figure contains an axes object. The axes object contains 2 objects of type violinplot.

    三个小提琴图具有分组标签 1、2 和 3。

    生成一个由正态分布随机数组成的向量,并创建一个分组数据向量。

    ydata = randn(100,1);
    xgroupdata = categorical(repelem(["group1";"group2";"group3"],[20,50,30]));

    ydata 中的数据创建一组小提琴图,并按照 xgroupdata 中的唯一值进行分组。图窗中的每个小提琴图对应 xgroupdata 中的一个唯一值。

    violinplot(xgroupdata,ydata)

    Figure contains an axes object. The axes object contains an object of type violinplot.

    生成两个正态分布数据向量和三个分组数据向量。

    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]));

    变量 ydata1ydata2 包含均值分别为 05 的正态分布数据。xgroupdata1xgroupdata2 包含相同分组标签的不同序列。xgroupdata3 包含与 xgroupdata1xgroupdata2 中的分组标签不同的分组标签。

    基于样本数据和分组数据创建一个表。

    tbl = table(xgroupdata1,xgroupdata2,xgroupdata3, ...
        ydata1,ydata2,VariableNames=["X1","X2","X3","Y1","Y2"]);

    使用 ydata1 中的数据创建一组叠加的小提琴图,并按照 xgroupdata1xgroupdata2 进行分组。

    violinplot(tbl,["X1","X2"],"Y1")

    Figure contains an axes object. The axes object with ylabel Y1 contains 2 objects of type violinplot.

    图窗显示两组叠加的小提琴图。蓝色小提琴图表示按照 xgroupdata1 分组的 ydata1 中的数据,橙色小提琴图表示按照 xgroupdata2 分组的相同数据。叠加图显示,不同分组并不会显著更改每组的中位数值。但是,它们对每组对应的小提琴图形状有明显影响。这一结果表明,每组中数据的分布受数据分组方式的影响。

    使用 ydata1 中的数据(按照 xgroupdata1 分组)和 ydata2 中的数据(按照 xgroupdata3 分组)创建另一组小提琴图。

    violinplot(tbl,["X1","X3"],["Y1","Y2"])

    Figure contains an axes object. The axes object contains 2 objects of type violinplot.

    与组 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)

    Figure contains an axes object. The axes object contains 5 objects of type violinplot.

    图窗显示一组小提琴图,分别对应 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)

    Figure contains an axes object. The axes object contains an object of type violinplot.

    创建两个由随机生成数据组成的向量。创建两个由位置分组数据组成的向量。

    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]);;

    变量 ydata1ydata2 包含随机生成的数据。xgroupdata1xgroupdata2 包含两个相同分组标签的不同序列。

    比较根据 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")

    Figure contains an axes object. The axes object contains 2 objects of type violinplot. These objects represent ydata1, ydata2.

    这些小提琴图显示,对于每个组,ydata1ydata2 的数据近似正态分布,并且 ydata1 的数据均值小于 ydata2 的数据均值。此外,ydata2 的数据在组 2 中的均值大于在组 1 中的均值。

    根据患者数据创建小提琴图,以比较吸烟者和非吸烟者的血压。绘图显示吸烟者的收缩压和舒张压高于非吸烟者。

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

    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")

    Figure contains 2 axes objects. Axes object 1 with ylabel Systolic Blood Pressure contains 2 objects of type violinplot. These objects represent Smoker, Nonsmoker. Axes object 2 with ylabel Diastolic Blood Pressure contains 2 objects of type violinplot. These objects represent Smoker, Nonsmoker.

    加载 patients 数据集,并将 Smoker 变量转换为 categorical

    load patients
    Smoker = categorical(Smoker,logical([1 0]),["Smoker","Nonsmoker"]);

    变量 DiastolicSmoker 包含患者舒张压和是否为吸烟者的数据。

    Diastolic 中的数据创建一组小提琴图,并按照 Smoker 进行分组。

    v = violinplot(Diastolic,GroupByColor=Smoker)
    v = 
      1×2 ViolinPlot array:
    
        ViolinPlot    ViolinPlot
    
    

    v 是一个包含两个 ViolinPlot 对象的数组。您可以通过指定 vViolinPlot 对象的属性来修改小提琴图。有关详细信息,请参阅ViolinPlot Properties

    更新小提琴图的颜色,使吸烟者的图为粉色,非吸烟者的图为绿色。

    v(1).FaceColor = [1 0 1]; % Pink
    v(2).FaceColor = [0 1 0]; % Green
    legend("Smoker","Nonsmoker")

    Figure contains an axes object. The axes object contains 2 objects of type violinplot. These objects represent Smoker, Nonsmoker.

    输入参数

    全部折叠

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

    • 如果 ydata 是矩阵,则 violinplotydata 的每列创建一个小提琴图。

    • 如果 ydata 是向量,而您没有指定 xgroupdatacgroupdata,则 violinplot 只创建一个小提琴图。

    • 如果 ydata 是向量并且您指定 xgroupdatacgroupdata,则 violinplotxgroupdatacgroupdata 中的每个唯一值组合创建一个小提琴图。

    数据类型: single | double

    位置分组数据,指定为数值或分类向量,或者数值或分类矩阵。

    如果 ydata 是长度为 n 的向量,则 xgroupdata 必须是长度为 n 的向量或具有 n 行的矩阵。

    如果 ydata 是矩阵,则 xgroupdata 必须为大小相同的矩阵,或为长度等于 ydata 中行数或列数的向量。

    violinplot 根据 xgroupdatacgroupdata 中的唯一值组合对 ydata 中的数据进行分组,并为每个组创建一个小提琴图。默认情况下,violinplot 沿垂直方向放置小提琴图,并沿 x 轴显示 xgroupdata 值。您可以使用 Orientation 属性来更改小提琴图的方向。

    数据类型: single | double | categorical

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

    violinplot 按照 xgroupdatacgroupdata 中的唯一值组合对 ydata 中的数据进行分组。该函数为每组数据创建一个小提琴图,并为具有相同 cgroupdata 值的组分配相同的颜色。

    数据类型: single | double | categorical | logical | string | char | cell

    包含要绘制的数据的源表,指定为表或时间表。

    包含位置分组数据的表变量,指定为一个或多个表变量索引。您指定的表变量必须包含数值、分类、日期时间或持续时间值。

    指定表索引

    使用以下任一索引方案指定预期的一个或多个变量。

    索引方案示例

    变量名称:

    • 字符串、字符向量或元胞数组。

    • pattern 对象。

    • "A"'A' - 名为 A 的变量

    • ["A","B"]{'A','B'} - 两个名为 AB 的变量

    • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

    变量索引:

    • 引用变量在表中位置的索引编号。

    • 由数字组成的向量。

    • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false 值。

    • 3 - 表中的第三个变量

    • [2 3] - 表中的第二个和第三个变量

    • [false false true] - 第三个变量

    变量类型:

    • vartype 下标,用于选择指定类型的变量。

    • vartype("categorical") - 包含分类值的所有变量

    绘制您的数据

    要仅绘制一组小提琴图,请为 xvaryvar 分别指定一个变量。例如,使用一个分类分组变量和两个包含正态分布随机值的变量创建一个表。根据 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")

    要一起绘制多个数据集,请为 xvaryvar 或两者指定多个变量。如果为两个参量都指定多个变量,则每个参量的变量数目必须相同。

    例如,使用 X 作为分组变量基于 Y1 中的数据创建一组小提琴图,并使用 Y2 作为数据创建一组小提琴图。

    violinplot(tbl,"X",["Y1","Y2"])

    您也可以对 xvaryvar 使用不同索引方案。例如,将 xvar 指定为变量名称,将 yvar 指定为索引编号。

    violinplot(tbl,"X",3)

    包含样本数据的表变量,指定为一个或多个表变量索引。您指定的表变量必须包含数值、分类、日期时间或持续时间值。

    指定表索引

    使用以下任一索引方案指定预期的一个或多个变量。

    索引方案示例

    变量名称:

    • 字符串、字符向量或元胞数组。

    • pattern 对象。

    • "A"'A' - 名为 A 的变量

    • ["A","B"]{'A','B'} - 两个名为 AB 的变量

    • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

    变量索引:

    • 引用变量在表中位置的索引编号。

    • 由数字组成的向量。

    • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false 值。

    • 3 - 表中的第三个变量

    • [2 3] - 表中的第二个和第三个变量

    • [false false true] - 第三个变量

    变量类型:

    • vartype 下标,用于选择指定类型的变量。

    • vartype("categorical") - 包含分类值的所有变量

    绘制您的数据

    要仅绘制一组小提琴图,请为 xvaryvar 分别指定一个变量。例如,使用两个分类分组变量和一个包含正态分布随机值的变量创建一个表。根据 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")

    要一起绘制多个数据集,请为 xvaryvar 或两者指定多个变量。如果为两个参量都指定多个变量,则每个参量的变量数目必须相同。

    例如,使用 X1 作为分组变量基于 Y 中的数据创建一组小提琴图,并使用 X2 作为分组变量创建一组小提琴图。

    violinplot(tbl,["X1","X2"],"Y")

    您也可以对 xvaryvar 使用不同索引方案。例如,将 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 与由 xgroupdataxvar 指定的位置分组数据具有相同的单位。

    示例: DensityWidth=0.5

    数据类型: single | double

    绘制完整或一半小提琴图,指定为下表中的值之一。

    描述
    "both"绘制小提琴图的两个“半部分”。
    "positive"

    绘制小提琴图的正半部分,具体取决于 Orientation 名称-值参量:

    • "vertical" - 仅绘制小提琴图的右半部分。

    • "horizontal" - 仅绘制小提琴图的上半部分。

    "negative"

    绘制小提琴图的负半部分,具体取决于 Orientation 名称-值参量:

    • "vertical" - 仅绘制小提琴图的左半部分。

    • "horizontal" - 仅绘制小提琴图的下半部分。

    示例: 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,则 violinplotxvaryvar 中的每个索引(以元素较多者为准)返回一个对象。

    • 如果您指定 cgroupdata,则 violinplot 为每组返回一个对象。

    在创建小提琴图后,使用 v 设置其属性。有关属性列表,请参阅 ViolinPlot Properties

    详细信息

    全部折叠

    版本历史记录

    在 R2024b 中推出

    全部展开

    另请参阅

    函数

    属性