首页 > 编程笔记 > MATLAB笔记 阅读:8

MATLAB swarmchart3():绘制三维分簇散点图(非常详细)

三维分簇散点图有助于可视化离散的 x、y 数据及 z 数据的分布。在每个 (x, y) 位置,点根据 z 的核密度估计值发生抖动。

在 MATLAB 中,利用函数 swarmchart3() 可以创建三维分簇散点图,其调用格式如下:
1) 向量数据:
swarmchart3(x,y,z) % 创建三维分簇散点图,点在 x 和 y 维度中发生偏移(抖动)
swarmchart3(x,y,z,sz) % 指定标记大小。先将 sz 指定为标量,则以相同的大小绘制所有标记
                      % 先将 sz 指定为与 x、y 和 z 大小相同的向量,则绘制不同大小的标记
swarmchart3(x,y,z,sz,c) % 指定标记的颜色
                        % 先将 c 指定为颜色名称或 RGB 三元组,则以相同的颜色绘制所有标记
                        % 先将 c 指定为与 x、y 和 z 大小相同的向量,则为每个标记指定一种不同的颜色
swarmchart3(___,mkr) % 指定不同于默认标记(圆形)的标记
swarmchart3(___,'filled') % 填充标记
2) 表数据:
swarmchart3(tbl,xvar,yvar,zvar) % 绘制表 tbl 中的变量 xvar、yvar 和 zvar
                                % 先为 xvar、yvar 和 zvar 分别指定一个变量,则绘制一个数据集
                                % 先为其中至少一个参数指定多个变量,则绘制多个数据集
swarmchart3(tbl,xvar,yvar,zvar,'filled') % 用实心圆绘制表中的指定变量

【实例 1】创建三维分簇散点图(向量数据)。在编辑器中编写以下程序并运行:
subplot(1,2,1) % 改变标记的颜色
x=[zeros(1,500) ones(1,500)]; % 创建包含 0 和 1 的组合的向量 x
y=randi(4,1,1000); % 创建包含 1 和 2 的随机组合的向量 y
z=randn(1,1000).^2; % 创建随机数平方向量 z
c=sqrt(z); % 计算向量 z 的平方根,指定标记的颜色
swarmchart3(x,y,z,10,c,'filled'); % 改变标记的颜色

subplot(1,2,2) % 更改抖动类型和宽度
s=swarmchart3(x,y,z);
s.XJitter='rand'; % 指定均匀随机抖动
s.XJitterWidth=0.5; % 将抖动宽度更改为 0.5 个数据单位
s.YJitter='randn'; % 指定正态随机抖动
s.YJitterWidth=0.1; % 将抖动宽度更改为 0.1 个数据单位
运行程序后,输出如下图所示图形:


图 1 三维分簇散点图(1)

【实例 2】利用 BicycleCounts.csv 数据集创建三维分簇散点图。数据集包含一段时间内的自行车交通流量数据。在编辑器中编写以下程序并运行:
tbl=readtable(fullfile(matlabroot,'examples','matlab','data','BicycleCounts.csv')); % 将数据集读入名为 tbl 的时间表中
tbl(1:5,:) % 显示 tbl 的前五行,输出略
daynames=["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"]; % 向量 x 包含每个观测值的星期几信息
x=categorical(tbl.Day,daynames);

ispm=tbl.Timestamp.Hour < 12;
y=categorical; % 根据观测值的时间创建一个包含值"pm"或"am"的分类向量 y
y(ispm)="pm";
y(~ispm)="am";
z=tbl.Eastbound; % 创建东行交通数据的向量 z
swarmchart3(x,y,z,2); % 创建分簇散点图,显示一周中每个白天和晚上的数据分布
运行程序后,输出如下图所示图形:


图 2 三维分簇散点图(2)

相关文章