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 分钟前
python_综合训练
开发语言·python
多彩电脑4 分钟前
Kivy的事件向方法传递的event是什么?
开发语言·python
运维行者_9 分钟前
使用Applications Manager监控的关键MongoDB指标
服务器·开发语言·网络·数据库·mongodb·机器学习·云计算
CSDN_MAXF9 分钟前
车载摄像头抗静电器件选型仿真分析
matlab·集成测试·硬件工程
解决问题no解决代码问题19 分钟前
设计模式分类介绍
java·开发语言·设计模式
sugar__salt21 分钟前
从Python列表切片到LLM接口实战:零基础AI编程落地教程
开发语言·python·ai·prompt·transformer·ai编程
z落落25 分钟前
C# 数组属性和方法(Clear / Copy / IndexOf / LastIndexOf)
开发语言·javascript·c#
白露与泡影28 分钟前
Java虚拟线程实战:从线程池痛点到性能优化全流程
java·开发语言·性能优化
IT空门:门主32 分钟前
Java 单例模式详解:7 种实现方式 + volatile 原理 + 反射与序列化问题
java·开发语言·单例模式
Byte Wizard35 分钟前
自定义类型:联合和枚举
c语言·开发语言