MATLAB的数据可视化功能是其核心优势之一,凭借简洁的语法和丰富的绘图函数,能快速将数值数据转化为直观的图形,广泛应用于数据分析、结果展示、论文绘图等场景。本文从基础绘图到进阶美化,系统讲解MATLAB数据可视化的核心方法,兼顾实用性和易操作性,适配科研、工程等各类应用场景。
一、MATLAB数据可视化基础认知
1. 核心绘图逻辑
MATLAB绘图遵循"数据准备→基础绘图→样式调整→标注导出"的流程,所有绘图操作均基于"图形句柄"(Figure),可理解为"先创建画布,再绘制图形,最后美化细节"。
2. 常用绘图类型与对应函数
| 绘图类型 | 适用场景 | 核心函数 |
|---|---|---|
| 二维折线图 | 数据趋势变化(如时间序列) | plot() |
| 散点图 | 变量间相关性分析 | scatter() |
| 柱状图/条形图 | 分类数据对比 | bar()/barh() |
| 直方图 | 数据分布统计 | histogram() |
| 饼图 | 占比分析 | pie() |
| 三维曲面图 | 二维数据的空间分布 | surf()/mesh() |
3. 基础环境准备
无需额外安装插件,打开MATLAB后,直接在命令行窗口(Command Window)或脚本文件(.m)中编写代码即可。本文基于MATLAB R2022b版本,兼容R2020及以上主流版本。
二、二维数据可视化(最常用)
二维图形是数据可视化的基础,重点掌握折线图、散点图、柱状图的绘制与美化。
1. 二维折线图(plot())
适用于展示数据随自变量的变化趋势,是最基础也最常用的绘图函数。
示例1:基础折线图
绘制函数 y=sin(x)+cos(x)y = \sin(x) + \cos(x)y=sin(x)+cos(x) 在 x∈[0,2π]x \in [0, 2\pi]x∈[0,2π] 范围内的曲线:
matlab
% 步骤1:准备数据
x = 0:0.01:2*pi; % 生成0到2π的等间隔数据,步长0.01(步长越小曲线越平滑)
y = sin(x) + cos(x);
% 步骤2:基础绘图
figure; % 创建新的画布(避免覆盖已有图形)
plot(x, y); % 绘制折线图,x为横轴,y为纵轴
% 步骤3:添加标注与样式
xlabel('x (弧度)'); % 横轴标签
ylabel('y = sin(x) + cos(x)'); % 纵轴标签
title('正弦+余弦函数曲线'); % 图形标题
grid on; % 显示网格线
legend('y = sin(x)+cos(x)'); % 图例(单条曲线可省略,多条必加)
示例2:多曲线叠加绘图
在同一张图中绘制 y1=sin(x)y_1 = \sin(x)y1=sin(x) 和 y2=cos(x)y_2 = \cos(x)y2=cos(x),并区分样式:
matlab
x = 0:0.01:2*pi;
y1 = sin(x);
y2 = cos(x);
figure;
% 绘制两条曲线,指定颜色、线型、标记(便于区分)
plot(x, y1, 'r-*', 'LineWidth', 1.5, 'MarkerSize', 6); % 红色实线+星号标记,线宽1.5
hold on; % 保留当前画布,继续绘制下一条曲线
plot(x, y2, 'b--o', 'LineWidth', 1.5, 'MarkerSize', 6); % 蓝色虚线+圆圈标记
hold off; % 关闭保留
% 美化标注
xlabel('x (弧度)');
ylabel('函数值');
title('sin(x)与cos(x)曲线对比');
grid on;
legend('sin(x)', 'cos(x)'); % 图例顺序与绘图顺序一致
关键参数说明:
- 颜色:
r(红)、b(蓝)、g(绿)、k(黑)、m(品红); - 线型:
-(实线)、--(虚线)、:(点线)、-.(点划线); - 标记:
*(星号)、o(圆圈)、s(正方形)、^(上三角)。
2. 散点图(scatter())
适用于展示两个变量之间的相关性,例如分析身高与体重的关系。
示例:随机生成数据绘制散点图
matlab
% 生成模拟数据:身高(150-190cm)与体重(40-80kg)
height = 150 + 40*rand(100, 1); % 100个样本,150-190cm
weight = 40 + 0.8*(height-150) + 5*randn(100, 1); % 体重与身高正相关,加随机噪声
figure;
scatter(height, weight, 50, 'filled', 'MarkerFaceColor', [0.2 0.6 0.8]); % 点大小50,填充,自定义蓝色
xlabel('身高 (cm)');
ylabel('体重 (kg)');
title('身高与体重相关性散点图');
grid on;
参数说明 :50为点的大小,filled表示填充标记,MarkerFaceColor指定填充颜色(可传RGB值或预定义颜色)。
3. 柱状图(bar()/barh())
适用于对比不同分类的数据,例如不同月份的销售额、不同实验组的测试结果。
示例:分类数据柱状图
matlab
% 准备数据:4个季度的销售额(万元)
quarters = {'Q1', 'Q2', 'Q3', 'Q4'}; % 分类标签
sales = [85, 120, 98, 150]; % 对应销售额
figure;
bar(quarters, sales, 'FaceColor', [0.1 0.7 0.3]); % 绿色柱状图
xlabel('季度');
ylabel('销售额 (万元)');
title('2024年各季度销售额');
% 给每个柱子添加数值标签
for i = 1:length(sales)
text(i, sales(i)+5, num2str(sales(i)), 'HorizontalAlignment', 'center');
end
grid on;
% 如需绘制横向柱状图,替换为barh():
% barh(quarters, sales);
4. 直方图(histogram())
用于展示数据的分布特征,例如学生成绩分布、产品尺寸误差分布。
示例:正态分布数据直方图
matlab
% 生成1000个符合正态分布的随机数(均值50,标准差10)
data = 50 + 10*randn(1000, 1);
figure;
histogram(data, 20, 'Normalization', 'probability'); % 20个区间,归一化为概率
xlabel('数值');
ylabel('概率');
title('正态分布数据直方图');
grid on;
参数说明 :20为直方图的区间数,Normalization指定归一化方式(probability为概率,count为计数,density为密度)。
三、三维数据可视化
当数据涉及三个维度时(如空间坐标、二维网格的数值分布),需使用三维绘图函数,核心是plot3()(三维折线)、surf()(三维曲面)。
1. 三维折线图(plot3())
适用于展示三维空间中数据的轨迹,例如无人机飞行路径、三维曲线。
示例:三维螺旋线
matlab
% 生成三维螺旋线数据
t = 0:0.1:10*pi;
x = sin(t);
y = cos(t);
z = t/2;
figure;
plot3(x, y, z, 'm-', 'LineWidth', 2); % 品红色实线,线宽2
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('三维螺旋线');
grid on;
view(45, 30); % 调整视角(方位角45°,仰角30°)
2. 三维曲面图(surf())
适用于展示二维网格上的数值分布,例如地形高度、温度场分布。
示例:二维高斯分布曲面
matlab
% 生成二维网格
[X, Y] = meshgrid(-2:0.1:2, -2:0.1:2); % 生成X、Y网格矩阵
% 计算高斯分布数值
Z = exp(-(X.^2 + Y.^2)/2) / (2*pi);
figure;
surf(X, Y, Z); % 绘制曲面
shading interp; % 平滑着色(默认是网格状,interp为插值平滑)
colorbar; % 显示颜色条(对应Z值大小)
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('二维高斯分布曲面图');
view(30, 40);
grid on;
四、图形美化与导出
1. 通用美化技巧
- 调整画布大小 :
figure('Position', [100, 100, 800, 600])([左下角X, 左下角Y, 宽度, 高度],单位像素); - 自定义颜色 :除预定义颜色外,可使用RGB值(如
[0.2 0.4 0.8]表示浅蓝色),或MATLAB的配色方案colormap(parula)(parula/jet/hsv等); - 修改字体与字号 :
xlabel('X轴', 'FontSize', 12, 'FontName', 'SimHei')(SimHei为黑体,支持中文); - 图例位置调整 :
legend('Location', 'best')(自动选最优位置)、'northwest'(西北方向)等。
2. 中文显示问题解决
MATLAB默认可能出现中文乱码,需提前设置字体:
matlab
% 全局设置中文显示
set(0, 'DefaultAxesFontName', 'SimHei'); % 坐标轴字体
set(0, 'DefaultTextFontName', 'SimHei'); % 文本字体
set(0, 'DefaultFigureFontName', 'SimHei'); % 画布字体
3. 图形导出(高质量)
绘制完成后,需导出为高清格式(如PNG、PDF、EPS)用于论文/报告:
matlab
% 方法1:代码导出(推荐,可控性高)
print(gcf, 'sales_plot.png', '-dpng', '-r300'); % gcf为当前画布,-r300为分辨率300DPI
% 方法2:手动导出:点击画布菜单栏"File→Save As",选择格式并设置分辨率。
导出建议:
- 论文配图:优先选PDF(矢量图,无失真)或EPS;
- 演示文稿:选PNG(分辨率300DPI以上);
- 大幅面展示:选TIFF格式。