MATLAB绘图函数介绍:plotmatrix绘图,附MATLAB例子

文章目录

绘图介绍

应用场景

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 对角线直方图坐标轴对象

核心特点:

  1. 当只输入 X 时,生成 p × p p \times p p×p 的图形矩阵:对角线为各变量直方图,非对角线为两两变量散点图。
  2. 当输入 XY 时,生成 q × p q \times p q×p 的图形矩阵(X 的列 vs Y 的列)。
  3. 可通过返回的句柄灵活修改每个子图的属性(颜色、标记、字体等)。
  4. 函数基于 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对变量之间的散点图(蓝色点),清晰呈现变量间相关性------相关系数越高,散点越集中于对角方向。

命令行截图:

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

相关推荐
老迟到的茉莉3 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python
学逆向的3 小时前
汇编——内存
开发语言·汇编·算法·网络安全
lbb 小魔仙4 小时前
MuMu 模拟器 6.0 硬核测评:这次升级确实不一样
java·开发语言·模拟器·mumu·硬核测评
r_oo_ki_e_4 小时前
Java 线程池
java·开发语言
杜子不疼.5 小时前
【Qt初识】信号槽(二):自定义信号函数与槽函数
开发语言·qt
ctrl_v助手5 小时前
C#日志工具类log4net的使用
开发语言·c#
秋田君5 小时前
Qt_QVariant
开发语言·qt
江华森5 小时前
Python 实现高德地图找房(三):地图可视化与高德 JS API
开发语言·javascript·python
weixin_471383035 小时前
args,...args与Parameters<T>
开发语言·前端
ctrl_v助手6 小时前
C#表达题笔记
开发语言·c#