MATLAB swarmchart():绘制分簇散点图(附带实例)
分簇散点图通常用于展示多个群集(Clusters)中数据点的分布情况,每个群集代表数据的一个子集或类别。分簇散点图通过在坐标系中的不同区域显示这些群集,帮助观察者理解数据的结构和群集之间的关系。
在分簇散点图中,我们对点进行了抖动处理。抖动是通过在每个点的位置上添加均匀随机值来实现的。这些随机值的调整考虑了 y 值的高斯核密度估计结果,以及每个 x 位置处的相对点数(该位置附近点的密度)。
具体来说,高斯核密度估计值用于反映 y 值的分布密度,而相对点数则用于调整每个 x 位置处的抖动程度。分簇散点图有助于可视化离散的 x 数据及 y 数据的分布。在 x 中的每个位置,点根据 y 的核密度估计值发生抖动。
在 MATLAB 中,利用函数 swarmchart() 可以创建分簇散点图,其调用格式如下。
1) 针对向量和矩阵数据:
【实例 1】针对向量和矩阵数据创建分簇散点图。在编辑器中编写以下程序并运行:

图 1 分簇散点图(1)
【实例 2】根据 BicycleCounts.csv 数据集绘制分簇散点图(表数据)。此数据集包含一段时间内的自行车交通流量数据。
在编辑器中编写以下程序并运行:

图 2 分簇散点图(2)
继续在编辑器中编写以下程序并运行:

图 3 更改抖动类型的分簇散点图
继续在编辑器中编写以下程序并运行:

图 4 更改抖动宽度的分簇散点图
在分簇散点图中,我们对点进行了抖动处理。抖动是通过在每个点的位置上添加均匀随机值来实现的。这些随机值的调整考虑了 y 值的高斯核密度估计结果,以及每个 x 位置处的相对点数(该位置附近点的密度)。
具体来说,高斯核密度估计值用于反映 y 值的分布密度,而相对点数则用于调整每个 x 位置处的抖动程度。分簇散点图有助于可视化离散的 x 数据及 y 数据的分布。在 x 中的每个位置,点根据 y 的核密度估计值发生抖动。
在 MATLAB 中,利用函数 swarmchart() 可以创建分簇散点图,其调用格式如下。
1) 针对向量和矩阵数据:
swarmchart(x,y) % 显示分簇散点图,点在 x 维度中偏移(抖动),形成不同的形状 % 每个形状的轮廓类似于小提琴。将 x、y 指定为等长向量,可以绘制一组点 % 将 x、y 之一指定为矩阵,可以在同一组坐标区上绘制多组点 swarmchart(x,y,sz) % 指定标记大小。将 sz 指定为标量,则以相同的大小绘制所有标记 % 将 sz 指定为向量或矩阵,则绘制不同大小的标记 swarmchart(x,y,sz,c) % 指定标记的颜色 swarmchart(__,mkr) % 指定不同于默认标记(圆形)的标记 swarmchart(__,'filled') % 填充标记 swarmchart(x,y,'LineWidth',2) % 创建具有两点标记轮廓的分簇散点图2) 针对表数据:
swarmchart(tbl,xvar,yvar) % 绘制表 tbl 中的变量 xvar 和 yvar % 要绘制一个数据集,请为 xvar、yvar 分别指定一个变量 % 要绘制多个数据集,请为 xvar、yvar 或两者指定多个变量 swarmchart(tbl,xvar,yvar,'filled') % 绘制指定的变量并填充标记 swarmchart(tbl,'MyX','MyY','ColorVariable','MyColors') % 根据表中的数据创建分簇散点图,并使用表中的数据自定义标记颜色
【实例 1】针对向量和矩阵数据创建分簇散点图。在编辑器中编写以下程序并运行:
subplot(1,2,1) x = [ones(1,250) 2*ones(1,250) 3*ones(1,250)]; % 创建 x 坐标组成的向量 y = [2*randn(1,250) 3*randn(1,250)+5 5*randn(1,250)+5]; % 随机值 swarmchart(x,y) % 创建关于 x 和 y 的分簇散点图 subplot(1,2,2) %% 创建三组 x 和 y 坐标,使用 randn 函数为 y 生成随机值 x1 = ones(1,500); x2 = 2*ones(1,500); x3 = 3*ones(1,500); y1 = 2*randn(1,500); y2 = [randn(1,250) randn(1,250)+4]; y3 = 5*randn(1,500)+5; swarmchart(x1,y1,5) % 第 1 个数据集,标记大小 5 hold on swarmchart(x2,y2,5) % 第 2 个数据集 swarmchart(x3,y3,5) % 第 3 个数据集 hold off运行程序后,输出如下图所示图形:

图 1 分簇散点图(1)
【实例 2】根据 BicycleCounts.csv 数据集绘制分簇散点图(表数据)。此数据集包含一段时间内的自行车交通流量数据。
在编辑器中编写以下程序并运行:
tbl = readtable(fullfile(matlabroot,'examples','matlab','data','BicycleCounts.csv')); % 将数据集读入名为 tbl 的时间表中 tbl(1:5,:) % 显示表的前五行,输出略 daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" ... "Friday" "Saturday"]; % 向量包含每个观测值的星期几信息 x = categorical(tbl.Day, daynames); y = tbl.Total; % 向量 y 包含观测到的自行车流量信息 c = hour(tbl.Timestamp); % 向量 c 包含一天中的小时信息 swarmchart(x,y,'.'); % 指定点标记的分簇散点图,显示一周中每天的交通流量分布情况运行程序后,输出如下图所示图形:

图 2 分簇散点图(2)
继续在编辑器中编写以下程序并运行:
s = swarmchart(x,y,10,c,'filled'); % 将标记大小指定为 10,颜色指定为向量 c % 用向量 c 中的值对图窗的颜色图进行索引操作,颜色根据每个数据点的小时信息而变化运行程序后,输出如下图所示图形:

图 3 更改抖动类型的分簇散点图
继续在编辑器中编写以下程序并运行:
%% 在每个 x 位置更改簇的形状,使点均匀随机分布,将间距限制为不超过 0.5 个数据单位 s.XJitter = 'rand'; s.XJitterWidth = 0.5;运行程序后,输出如下图所示图形:

图 4 更改抖动宽度的分簇散点图