
文章目录
绘图介绍
应用场景
plotmatrix 是 MATLAB 中用于绘制**散点图矩阵(Scatter Plot Matrix)**的函数,适用于以下场景:
- 多变量数据探索分析:快速观察多个变量两两之间的相关性与分布规律。
- 特征工程预处理:在机器学习或数据建模前,直观判断变量之间是否存在线性/非线性关系。
- 统计分析报告:在学术论文或工程报告中展示多维数据的整体分布特征。
- 传感器/导航数据分析 :如 I M U IMU IMU 各轴数据、 G P S GPS GPS 多维误差的相关性分析,常用于导航与定位系统的调试与评估。
例如:有一组包含加速度计 X / Y / Z X/Y/Z X/Y/Z 三轴数据,通过 plotmatrix 可以一次性展示三轴之间两两的散点分布及各自的直方图,极大提升分析效率。
函数介绍
plotmatrix 函数的基本语法如下:
matlab
plotmatrix(X)
plotmatrix(X, Y)
[S, AX, BigAx, H, HAx] = plotmatrix(___)
参数说明:
| 参数 | 说明 |
|---|---|
X |
n × p n \times p n×p 的数据矩阵,绘制各列之间的散点图矩阵,对角线为对应列的直方图 |
Y |
n × q n \times q n×q 的数据矩阵,绘制 X 各列 vs Y 各列的散点图 |
S |
散点图对象数组(p × p) |
AX |
坐标轴对象数组 |
BigAx |
覆盖整体的不可见坐标轴对象 |
H |
对角线直方图对象 |
HAx |
对角线直方图坐标轴对象 |
核心特点:
- 当只输入
X时,生成 p × p p \times p p×p 的图形矩阵:对角线为各变量直方图,非对角线为两两变量散点图。 - 当输入
X和Y时,生成 q × p q \times p q×p 的图形矩阵(X 的列 vs Y 的列)。 - 可通过返回的句柄灵活修改每个子图的属性(颜色、标记、字体等)。
- 函数基于
gplotmatrix实现,适合大规模多变量可视化。
应用示例
MATLAB代码
以下示例模拟一组含有 4 个变量(如导航系统中位置误差 X/Y/Z 与速度误差 V)的数据,绘制散点图矩阵,并对图形进行美化标注。
matlab
%% plotmatrix 示例:多变量散点图矩阵绘制
% 模拟数据:4个变量,200个样本点
clear; clc; close all;
rng(0); % 固定随机种子,保证可重复性
n = 200;
% 构造带相关性的多变量正态分布数据
mu = [0, 0, 0, 0];
Sigma = [1.0 0.8 0.3 0.1;
0.8 1.0 0.5 0.2;
0.3 0.5 1.0 0.6;
0.1 0.2 0.6 1.0];
% 如果安装了统计工具箱,可以直接使用 mvnrnd
X = mvnrnd(mu, Sigma, n);
%% 绘制散点图矩阵
figure('Name', 'plotmatrix示例', ...
'Color', 'w', ...
'Position', [100, 100, 800, 700]);
[S, AX, BigAx, H, HAx] = plotmatrix(X);
%% 美化散点图:修改散点颜色与大小
for i = 1:numel(S)
% plotmatrix 返回的是 Line 对象,不是 scatter 对象
% 因此不能使用 SizeData,应使用 MarkerSize
if isprop(S(i), 'MarkerFaceColor')
S(i).MarkerFaceColor = [0.2 0.5 0.8]; % 蓝色填充
end
if isprop(S(i), 'MarkerEdgeColor')
S(i).MarkerEdgeColor = [0.2 0.5 0.8]; % 蓝色边框
end
if isprop(S(i), 'MarkerSize')
S(i).MarkerSize = 4; % 散点大小
end
if isprop(S(i), 'LineStyle')
S(i).LineStyle = 'none'; % 不连接散点
end
end
%% 美化直方图:修改颜色
for i = 1:numel(H)
if isprop(H(i), 'FaceColor')
H(i).FaceColor = [0.9 0.4 0.2]; % 橙色
end
if isprop(H(i), 'EdgeColor')
H(i).EdgeColor = 'white';
end
end
%% 添加变量标签
varNames = {'位置误差X', '位置误差Y', '位置误差Z', '速度误差V'};
n_vars = length(varNames);
for i = 1:n_vars
% x轴标签,最后一行
xlabel(AX(n_vars, i), varNames{i}, ...
'FontSize', 9, ...
'FontWeight', 'bold');
% y轴标签,最左列
ylabel(AX(i, 1), varNames{i}, ...
'FontSize', 9, ...
'FontWeight', 'bold');
end
%% 添加总标题
title(BigAx, '多变量散点图矩阵(plotmatrix)', ...
'FontSize', 13, ...
'FontWeight', 'bold', ...
'Color', [0.1 0.1 0.1]);
%% 坐标轴美化
for i = 1:numel(AX)
AX(i).FontSize = 8;
AX(i).LineWidth = 0.8;
AX(i).Box = 'on';
AX(i).XGrid = 'on';
AX(i).YGrid = 'on';
end
%% 计算并显示相关系数矩阵
R = corr(X);
fprintf('\n相关系数矩阵:\n');
fprintf('%12s %12s %12s %12s %12s\n', '', varNames{:});
for i = 1:n_vars
fprintf('%12s ', varNames{i});
fprintf('%12.3f ', R(i, :));
fprintf('\n');
end
代码要点说明:
- 使用
mvnrnd生成带有预设相关性的多变量正态分布数据,更贴近真实工程场景。 - 通过返回的句柄
S(散点)和H(直方图)分别修改样式,实现精细化美化。 - 通过
AX句柄数组为每个子图添加坐标轴标签,清晰标识各变量含义。 - 附带相关系数矩阵的命令行输出,与图形结果形成互补。
运行结果
运行上述代码后,MATLAB 将生成如下效果的图形:

- 对角线:4个变量各自的直方图(橙色),直观展示各变量的边际分布。
- 非对角线:6对变量之间的散点图(蓝色点),清晰呈现变量间相关性------相关系数越高,散点越集中于对角方向。
命令行截图:

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者