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对变量之间的散点图(蓝色点),清晰呈现变量间相关性------相关系数越高,散点越集中于对角方向。

命令行截图:

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

相关推荐
比特 GOK1 小时前
Qt项目ui文件中新添加的控件在代码中不识别的问题解决
开发语言·qt·ui
云天AI实战派1 小时前
Agent 全流程实战:用 Python 搭建技能路由智能体,落地小龙虾门店运营助手
开发语言·人工智能·python
rit84324991 小时前
基于遗传算法的电动汽车充电站选址优化:模型与MATLAB实现
开发语言·matlab
Rust研习社2 小时前
你为什么总是入门 Rust 失败
开发语言·后端·rust
我滴老baby2 小时前
工具调用全景解析从Function Calling到MCP协议的完整实践
开发语言·人工智能·python·架构·fastapi
小李子呢02112 小时前
前端八股JS---Map / Set / WeakMap / WeakSet
开发语言·前端·javascript
feifeigo1232 小时前
自适应大邻域搜索(ALNS)算法的MATLAB 实现
开发语言·算法·matlab
沐知全栈开发2 小时前
API 类别 - 实用工具
开发语言
Cx330❀2 小时前
Qt 入门指南:从零搭建开发环境到第一个图形界面程序
xml·大数据·开发语言·网络·c++·人工智能·qt