Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

swarmchart3

三维群散点图

自 R2020b 起

  • 3-D swarm scatter chart

说明

向量数据

示例

swarmchart3(x,y,z) 显示一个三维分簇散点图,它是散点图,点在 xy 维度中发生偏移(抖动)。这些点形成不同形状,每个形状的轮廓类似于小提琴图。三维分簇散点图有助于您可视化离散的 (x,y) 数据以及 z 数据的分布。在每个 (x,y) 位置,点根据 z 的核密度估计值发生抖动。

示例

swarmchart3(x,y,z,sz) 指定标记大小。要以相同的大小绘制所有标记,请将 sz 指定为标量。要绘制具有不同大小的标记,请将 sz 指定为与 xyz 大小相同的向量。

示例

swarmchart3(x,y,z,sz,c) 指定标记颜色。要以相同的颜色绘制所有标记,请将 c 指定为颜色名称或 RGB 三元组。要为每个标记指定一种不同颜色,请指定与 xyz 大小相同的向量。您也可以指定 RGB 三元组的三列矩阵。矩阵中的行数必须与 xyz 的长度相匹配。

示例

swarmchart3(___,mkr) 指定不同于默认标记(圆形)的标记。需要在上述任一语法中的所有参数之后指定 mkr

示例

swarmchart3(___,'filled') 填充标记。需要在上述任一语法中的所有参数之后指定 'filled' 选项。

表数据

示例

swarmchart3(tbl,xvar,yvar,zvar) 绘制表 tbl 中的变量 xvaryvarzvar。要绘制一个数据集,请为 xvaryvarzvar 各指定一个变量。要绘制多个数据集,请为其中至少一个参数指定多个变量。对于指定多个变量的参数,指定的变量数目必须相同。

示例

swarmchart3(tbl,xvar,yvar,zvar,'filled') 用实心圆绘制表中的指定变量。

其他选项

示例

swarmchart3(ax,___) 在目标坐标区中显示分簇散点图。需要在上述任一语法中的所有参数之前指定坐标区。

swarmchart3(___,Name,Value) 使用一个或多个 Name,Value 参数指定分簇散点图的其他属性。例如:

  • swarmchart3(x,y,z,'LineWidth',2) 创建一个具有两点标记轮廓的分簇散点图。

  • swarmchart3(tbl,'MyX','MyY','MyZ','ColorVariable','MyColors') 根据表中的数据创建一个分簇散点图,并使用表中的数据自定义标记颜色。

有关属性列表,请参阅 Scatter 属性

示例

s = swarmchart3(___) 返回 Scatter 对象。创建图后,使用 s 修改图属性。有关属性列表,请参阅 Scatter 属性

示例

全部折叠

BicycleCounts.csv 数据集读入名为 tbl 的时间表中。此数据集包含一段时间内的自行车交通流量数据。显示 tbl 的前五行。

tbl = readtable("BicycleCounts.csv");
tbl(1:5,:)
ans=5×5 table
         Timestamp               Day         Total    Westbound    Eastbound
    ____________________    _____________    _____    _________    _________

    24-Jun-2015 00:00:00    {'Wednesday'}     13          9            4    
    24-Jun-2015 01:00:00    {'Wednesday'}      3          3            0    
    24-Jun-2015 02:00:00    {'Wednesday'}      1          1            0    
    24-Jun-2015 03:00:00    {'Wednesday'}      1          1            0    
    24-Jun-2015 04:00:00    {'Wednesday'}      1          1            0    

根据每个观测值创建一个具有星期几的向量 x

daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"];
x = categorical(tbl.Day,daynames);

根据表中每个观测值的时间,创建一个包含值 "pm""am" 的分类向量 y。创建东行交通数据的向量 z。然后创建一个关于 xyz 的分簇散点图。该图显示一周中每个白天和晚上的数据分布。

ispm = tbl.Timestamp.Hour < 12;
y = categorical;
y(ispm) = "pm";
y(~ispm) = "am";
z= tbl.Eastbound;
swarmchart3(x,y,z);

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

将向量 x 创建为 0 和 1 的组合,将 y 创建为全为 1 的向量。将 z 创建为随机数平方的向量。然后创建一个关于 xyz 的分簇散点图,并将标记大小指定为 5

x = [zeros(1,500) ones(1,500)];
y = ones(1,1000);
z = randn(1,1000).^2;
swarmchart3(x,y,z,5);

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

将向量 x 创建为 0 和 1 的组合,将 y 创建为全为 1 的向量。将 z 创建为随机数平方的向量。然后创建一个 xyz 的分簇散点图,并指定点 ('.') 标记符号。

x = [zeros(1,500) ones(1,500)];
y = ones(1,1000);
z = randn(1,1000).^2;
swarmchart3(x,y,z,'.');

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

创建包含 0 和 1 的组合的向量 x,创建包含 1 和 2 的随机组合的向量 y。将 z 创建为随机数平方的向量。通过创建向量 c 作为 z 的平方根,指定标记的颜色。然后创建一个关于 xyz 的分簇散点图。将标记大小设置为 50,并将颜色指定为 cc 中的值对图窗的颜色图进行索引。使用 'filled' 选项用颜色填充标记,而不是将其显示为空心圆圈。

x = [zeros(1,500) ones(1,500)];
y = randi(2,1,1000);
z = randn(1,1000).^2;
c = sqrt(z);
swarmchart3(x,y,z,50,c,'filled');

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

创建包含 0 和 1 的组合的向量 x,创建包含数字 1 到 4 的随机组合的向量 y。将 z 创建为随机数平方的向量。然后通过调用带返回参数(用于存储 Scatter 对象)的 swarmchart 函数,创建一个 xyz 的分簇散点图。添加 x 轴和 y 轴标签,以便您可以看到在每个维度中更改抖动属性的效果。

x = [zeros(1,500) ones(1,500)];
y = randi(4,1,1000);
z = randn(1,1000).^2;
s = swarmchart3(x,y,z);
xlabel('X')
ylabel('Y')

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains an object of type scatter.

通过设置 Scatter 对象的抖动属性更改点簇的形状。在 x 维度中,指定均匀随机抖动,并将抖动宽度更改为 0.5 个数据单位。在 y 维度中,指定正态随机抖动,并将抖动宽度更改为 0.1 个数据单位。点之间的间距不超过您指定的抖动宽度。

s.XJitter = 'rand';
s.XJitterWidth = 0.5;
s.YJitter = 'randn';
s.YJitterWidth = 0.1;

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains an object of type scatter.

绘制表中数据的一种便捷方法是将表传递给 swarm3 函数,并指定要绘制的变量。例如,创建一个包含四个随机数变量的表,并绘制 XY1Z 变量。默认情况下,轴标签与变量名称匹配。

tbl = table(randi(2,100,1),randi(2,100,1),randi([10 11],100,1), ...
   randn(100,1),'VariableNames',{'X','Y1','Y2','Z'});

swarmchart3(tbl,'X','Y1','Z')

Figure contains an axes object. The axes object with xlabel X, ylabel Y1 contains an object of type scatter.

您也可以同时绘制多个变量。例如,通过将 yvar 参数指定为元胞数组 {'Y1','Y2'}y 轴上绘制 Y1Y2。然后,添加一个图例。图例标签与变量名称匹配。

swarmchart3(tbl,'X',{'Y1','Y2'},'Z')
legend

Figure contains an axes object. The axes object with xlabel X contains 2 objects of type scatter.

绘制表中数据并自定义颜色和标记大小的一种方法是设置 ColorVariableSizeData 属性。您可以在调用 swarmchart3 函数时将这些属性设置为名称-值参数,也可以稍后在 Scatter 对象上设置它们。

例如,创建一个包含四个随机数变量的表,并用填充标记绘制 XYZ 变量。通过指定 ColorVariable 名称-值参数来更改标记颜色。将 Scatter 对象返回为 s,以便以后可以设置其他属性。

tbl = table(randi(2,100,1),randn(100,1),randn(100,1),randn(100,1), ...
   'VariableNames',{'X','Y','Z','Colors'});

s = swarmchart3(tbl,'X','Y','Z','filled','ColorVariable','Colors');

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains an object of type scatter.

通过设置 SizeData 属性,将标记大小更改为 100 磅。

s.SizeData = 100;

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains an object of type scatter.

BicycleCounts.csv 数据集读入名为 tbl 的时间表中。此数据集包含一段时间内的自行车交通流量数据。显示 tbl 的前五行。

tbl = readtable("BicycleCounts.csv");
tbl(1:5,:)
ans=5×5 table
         Timestamp               Day         Total    Westbound    Eastbound
    ____________________    _____________    _____    _________    _________

    24-Jun-2015 00:00:00    {'Wednesday'}     13          9            4    
    24-Jun-2015 01:00:00    {'Wednesday'}      3          3            0    
    24-Jun-2015 02:00:00    {'Wednesday'}      1          1            0    
    24-Jun-2015 03:00:00    {'Wednesday'}      1          1            0    
    24-Jun-2015 04:00:00    {'Wednesday'}      1          1            0    

创建向量 x,其中包含每个观测值的星期几信息。根据表中每个观测值的时间,创建一个包含值 "pm""am" 的分类向量 y。将 ze 定义为东行交通流量数据的向量,将 zw 定义为西行交通流量数据的向量。

daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"];
x = categorical(tbl.Day,daynames);
ispm = tbl.Timestamp.Hour<12;
y = categorical;
y(ispm) = 'pm';
y(~ispm) = 'am';
ze = tbl.Eastbound;
zw = tbl.Westbound;

创建一个采用 'flow' 图块排列方式的分块图布局,以便坐标区填充布局中的可用空间。调用 nexttile 函数创建一个坐标区对象,并返回它作为 ax1。然后通过将 ax1 传递给 swarmchart 函数,创建一个东行数据的分簇散点图。

tiledlayout('flow')
ax1=nexttile;
swarmchart3(ax1,x,y,ze,'.');

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

重复该过程,为西行交通流量创建另一个坐标区对象和分簇散点图。

ax2 = nexttile;
z = tbl.Westbound;
swarmchart3(ax2,x,y,zw,'.');

Figure contains 2 axes objects. Axes object 1 contains an object of type scatter. Axes object 2 contains an object of type scatter.

输入参数

全部折叠

x 坐标,指定为数值标量或与 yz 大小相同的向量。

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

y 坐标,指定为数值标量或与 xz 大小相同的向量。

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

z 坐标,指定为数值标量或与 xy 大小相同的向量。

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

以磅为单位的标记大小,指定为下列形式之一:

  • 数值标量 - 以相同的大小绘制所有标记。

  • 行或列向量 - 使每个标记具有不同的大小。sz 的长度必须等于 xyz 的长度。

  • [] - 使用 36 磅的默认大小。

标记颜色,指定为下列形式之一:

  • RGB 三元组或颜色名称 - 使用相同的颜色绘制所有标记。RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度必须处于范围 [0,1] 中。您也可以指定下表中的颜色名称。

  • 由 RGB 三元组组成的三列矩阵 - 对每个标记使用不同的颜色。矩阵的每行为对应标记指定一种 RGB 三元组颜色。行数必须等于 xyz 的长度。

  • 向量 - 每个标记使用不同颜色。c 中的值对当前颜色图进行索引,它们涵盖该颜色图的完整范围。c 的长度必须等于 xyz 的长度。要更改颜色图,请使用 colormap 函数。

颜色名称描述对应的 RGB 三元组
'red''r'红色[1 0 0]
'green''g'绿色[0 1 0]
'blue''b'蓝色[0 0 1]
'yellow''y'黄色[1 1 0]
'magenta''m'品红色[1 0 1]
'cyan''c'青蓝色[0 1 1]
'white''w'白色[1 1 1]
'black''k'黑色[0 0 0]

标记类型,指定为下表中列出的值之一。

标记描述生成的标记
"o"圆圈

Sample of circle marker

"+"加号

Sample of plus sign marker

"*"星号

Sample of asterisk marker

"."

Sample of point marker

"x"叉号

Sample of cross marker

"_"水平线条

Sample of horizontal line marker

"|"垂直线条

Sample of vertical line marker

"square"方形

Sample of square marker

"diamond"菱形

Sample of diamond marker

"^"上三角

Sample of upward-pointing triangle marker

"v"下三角

Sample of downward-pointing triangle marker

">"右三角

Sample of right-pointing triangle marker

"<"左三角

Sample of left-pointing triangle marker

"pentagram"五角形

Sample of pentagram marker

"hexagram"六角形

Sample of hexagram marker

用于填充标记内部的选项,指定为 'filled'。此选项和具有一个面的标记(例如,'o''square')一起使用。没有面而只包含边的标记根本无法呈现,如 '+''*''.''x'

'filled' 选项将 Scatter 对象的 MarkerFaceColor 属性设置为 'flat',并将 MarkerEdgeColor 属性设置为 'none'。在这种情况下,MATLAB® 绘制标记面,但不绘制边。

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

包含 x 坐标的表变量,指定为一个或多个表变量索引。

指定表索引

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

索引方案示例

变量名称:

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

  • pattern 对象。

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

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

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

变量索引:

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

  • 由数字组成的向量。

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

  • 3 - 表中的第三个变量

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

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

变量类型:

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

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

绘制您的数据

您指定的表变量可以包含数值、分类、日期时间或持续时间值。

要绘制一个数据集,请为 xvar 指定一个变量,为 yvar 指定一个变量,为 zvar 指定一个变量。例如,创建一个包含四个正态分布随机值变量的表。绘制 XY1Z 变量。

tbl = table(randn(100,1),randn(100,1),randn(100,1)+5,randn(100,1), ...
   'VariableNames',{'X','Y1','Y2','Z'});

swarmchart3(tbl,'X','Y1','Z')

要一起绘制多个数据集,请为 xvaryvarzvar 中的至少一个指定多个变量。如果为多个参数指定多个变量,则为每个参数指定的变量数目必须相同。

例如,在 x 轴上绘制 X 变量,在 y 轴上绘制 Y1Y2 变量,在 z 轴上绘制 Z 变量。

swarmchart3(tbl,'X',{'Y1','Y2'},'Z')

您还可以对 xvaryvarzvar 使用不同索引方案。例如,将 xvar 指定为变量名称,将 yvar 指定为索引编号,将 zvar 指定为逻辑向量。

swarmchart3(tbl,'X',2,[false false true])

包含 y 坐标的表变量,指定为一个或多个表变量索引。

指定表索引

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

索引方案示例

变量名称:

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

  • pattern 对象。

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

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

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

变量索引:

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

  • 由数字组成的向量。

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

  • 3 - 表中的第三个变量

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

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

变量类型:

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

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

绘制您的数据

您指定的表变量可以包含数值、分类、日期时间或持续时间值。

要绘制一个数据集,请为 xvar 指定一个变量,为 yvar 指定一个变量,为 zvar 指定一个变量。例如,创建一个包含四个正态分布随机值变量的表。绘制 XY1Z 变量。

tbl = table(randn(100,1),randn(100,1),randn(100,1)+5,randn(100,1), ...
   'VariableNames',{'X','Y1','Y2','Z'});

swarmchart3(tbl,'X','Y1','Z')

要一起绘制多个数据集,请为 xvaryvarzvar 中的至少一个指定多个变量。如果为多个参数指定多个变量,则为每个参数指定的变量数目必须相同。

例如,在 x 轴上绘制 X 变量,在 y 轴上绘制 Y1Y2 变量,在 z 轴上绘制 Z 变量。

swarmchart3(tbl,'X',{'Y1','Y2'},'Z')

您还可以对 xvaryvarzvar 使用不同索引方案。例如,将 xvar 指定为变量名称,将 yvar 指定为索引编号,将 zvar 指定为逻辑向量。

swarmchart3(tbl,'X',2,[false false true])

包含 z 坐标的表变量,指定为一个或多个表变量索引。

指定表索引

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

索引方案示例

变量名称:

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

  • pattern 对象。

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

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

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

变量索引:

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

  • 由数字组成的向量。

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

  • 3 - 表中的第三个变量

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

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

变量类型:

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

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

绘制您的数据

您指定的表变量可以包含数值、分类、日期时间或持续时间值。

要绘制一个数据集,请为 xvar 指定一个变量,为 yvar 指定一个变量,为 zvar 指定一个变量。例如,创建一个包含四个正态分布随机值变量的表。绘制 XY1Z 变量。

tbl = table(randn(100,1),randn(100,1),randn(100,1)+5,randn(100,1), ...
   'VariableNames',{'X','Y1','Y2','Z'});

swarmchart3(tbl,'X','Y1','Z')

要一起绘制多个数据集,请为 xvaryvarzvar 中的至少一个指定多个变量。如果为多个参数指定多个变量,则为每个参数指定的变量数目必须相同。

例如,在 x 轴上绘制 X 变量,在 y 轴上绘制 Y1Y2 变量,在 z 轴上绘制 Z 变量。

swarmchart3(tbl,'X',{'Y1','Y2'},'Z')

您还可以对 xvaryvarzvar 使用不同索引方案。例如,将 xvar 指定为变量名称,将 yvar 指定为索引编号,将 zvar 指定为逻辑向量。

swarmchart3(tbl,'X',2,[false false true])

目标坐标区,指定为 Axes 对象。如果未指定坐标区,则 MATLAB 将在当前坐标区中进行绘制;或如果不存在 Axes 对象,则创建一个对象。

名称-值参数

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

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

示例: swarmchart3(randi(2,500,1),randi(2,500,1),randn(500,1),'MarkerFaceColor','red') 指定红色填充标记。

沿 x 维度的抖动类型(点的间距),指定为下列值之一:

  • 'none' - 不抖动点。

  • 'density' - 使用二维图的 y 的内核密度估计值对点进行抖动。如果在三维图的两个维度中指定此选项,则点会根据第三个维度中的内核密度估计值抖动。例如,将 XJitterYJitter 设置为 'density' 会使用 z 的内核密度估计值。

  • 'rand' - 以均匀分布随机抖动点。

  • 'randn' - 以正态分布随机抖动点。

沿 x 维度的最大抖动量(点之间的偏移量),以数据单位指定为非负标量值。

例如,要将抖动宽度设置为邻点之间最短距离的 90%,请取 x 的唯一值之间的最小距离并按 0.9 进行缩放。

XJitterWidth = 0.9 * min(diff(unique(x)));

沿 y 维度的抖动类型(点的间距),指定为下列值之一:

  • 'none' - 不抖动点。

  • 'density' - 使用二维图的 x 的内核密度估计值对点进行抖动。如果在三维图的两个维度中指定此选项,则点会根据第三个维度中的内核密度估计值抖动。例如,将 XJitterYJitter 设置为 'density' 会使用 z 的内核密度估计值。

  • 'rand' - 以均匀分布随机抖动点。

  • 'randn' - 以正态分布随机抖动点。

沿 y 维度的最大抖动量(点之间的偏移量),以数据单位指定为非负标量值。

例如,要将抖动宽度设置为邻点之间最短距离的 90%,请取 y 的唯一值之间的最小距离并按 0.9 进行缩放。

YJitterWidth = 0.9 * min(diff(unique(y)));

包含颜色数据的表变量,指定为源表的变量索引。

指定表索引

使用以下任一索引方案指定所需的变量。

索引方案示例

变量名称:

  • 字符串标量或字符向量。

  • pattern 对象。模式对象只能引用一个变量。

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

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

变量索引:

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

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

  • 3 - 表中的第三个变量

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

变量类型:

  • vartype 下标,用于选择指定类型的表变量。该下标只能引用一个变量。

  • vartype("double") - 包含双精度值的变量

指定颜色数据

指定 ColorVariable 属性控制标记的颜色。当 MarkerFaceColor 属性设置为 "flat" 时,变量中的数据控制标记填充颜色。当 MarkerEdgeColor 设置为 "flat" 时,数据还可以控制标记轮廓颜色。

您指定的表变量可以包含任何数值类型的值。这些值可以是以下形式之一:

  • 线性映射到当前颜色图中的一列数字。

  • 由 RGB 三元组组成的一个三列数组。RGB 三元组是包含三个元素的向量,其元素值指定特定颜色的红、绿和蓝分量的强度。强度必须处于范围 [0,1] 中。例如,[0.5 0.7 1] 指定浅蓝色。

当您设置 ColorVariable 属性时,MATLAB 会更新 CData 属性。

算法

分簇散点图中的点使用均匀随机值进行抖动,这些值由 z 的高斯核密度估计值和每个 (x, y) 位置处的相对点数进行加权。当您调用 swarmchart3 函数时,此行为对应于 Scatter 对象的 XJitterYJitter 属性的默认 'density' 设置。

默认情况下,每个 x 位置处的点的最大散布是相邻点之间最小距离的 90%。例如,在 x 维度中,散布的计算如下:

spread = 0.9 * min(diff(unique(x)));

您可以通过设置 Scatter 对象的 XJitterWidthYJitterWidth 属性来控制偏移量。

版本历史记录

在 R2020b 中推出

全部展开