文章目录
-
-
- 一、核心基础:二维可视化(最常用)
-
- [1. 基础曲线:plot(趋势展示)](#1. 基础曲线:plot(趋势展示))
- [2. 分布可视化:直方图/密度图(统计特征)](#2. 分布可视化:直方图/密度图(统计特征))
- [3. 对比可视化:柱状图/条形图(分类数据)](#3. 对比可视化:柱状图/条形图(分类数据))
- [4. 关联可视化:散点图(变量相关性)](#4. 关联可视化:散点图(变量相关性))
- 二、进阶可视化:三维图形
-
- [1. 三维曲线:plot3](#1. 三维曲线:plot3)
- [2. 曲面图:surf / mesh(网格图)](#2. 曲面图:surf / mesh(网格图))
- [3. 体积可视化:slice(切片图)](#3. 体积可视化:slice(切片图))
- 三、可视化定制化技巧(提升图表美观度)
-
- [1. 样式统一设置](#1. 样式统一设置)
- [2. 颜色与配色](#2. 颜色与配色)
- [3. 图例/标签优化](#3. 图例/标签优化)
- [4. 导出高清图片](#4. 导出高清图片)
- 四、实战场景示例
- 五、关键总结
-
MATLAB 提供了 丰富且灵活的数据可视化工具 ,覆盖从基础二维曲线到复杂三维图形、动态交互可视化的全场景需求。以下按「基础绘图→进阶可视化→定制化技巧→实战场景」分层讲解,附可直接运行的代码示例:
一、核心基础:二维可视化(最常用)
二维绘图是数据可视化的基础,适用于展示一维/二维数据的趋势、分布、对比关系。
1. 基础曲线:plot(趋势展示)
用于绘制单/多条曲线,适合展示「自变量-因变量」的连续趋势(如时间序列、函数曲线)。
matlab
% 示例:绘制正弦/余弦曲线,自定义样式
x = 0:0.01:2*pi; % 生成等间距自变量
y1 = sin(x);
y2 = cos(x);
figure('Color','w'); % 新建白色背景窗口
plot(x, y1, 'r-', 'LineWidth', 1.5, 'DisplayName','sin(x)'); % 红色实线
hold on; % 保留当前画布,继续绘图
plot(x, y2, 'b--', 'LineWidth', 1.5, 'DisplayName','cos(x)'); % 蓝色虚线
xlabel('x (弧度)','FontSize',12); % x轴标签(字号12)
ylabel('y值','FontSize',12); % y轴标签
title('sin(x) & cos(x) 曲线','FontSize',14); % 标题
legend('Location','best'); % 图例(自动选最优位置)
grid on; % 显示网格
xlim([0, 2*pi]); % 限定x轴范围
hold off;
2. 分布可视化:直方图/密度图(统计特征)
用于展示数据的分布特征,常见函数:histogram(直方图)、ksdensity(核密度估计)。
matlab
% 示例:正态分布数据的分布可视化
data = randn(1000,1); % 生成1000个正态分布随机数
figure('Color','w');
subplot(1,2,1); % 1行2列,第1个子图
histogram(data, 'BinWidth',0.5, 'FaceColor','#1f77b4', 'EdgeColor','w');
title('直方图','FontSize',12);
xlabel('数据值'); ylabel('频数');
subplot(1,2,2); % 第2个子图
[f, xi] = ksdensity(data); % 核密度估计
plot(xi, f, 'r-', 'LineWidth',1.5);
title('核密度曲线','FontSize',12);
xlabel('数据值'); ylabel('概率密度');
3. 对比可视化:柱状图/条形图(分类数据)
用于对比不同类别数据的数值大小,常见函数:bar(柱状图)、barh(横向条形图)。
matlab
% 示例:多组分类数据对比
categories = {'A类','B类','C类','D类'};
data1 = [12, 25, 18, 30]; % 第一组数据
data2 = [8, 20, 22, 25]; % 第二组数据
figure('Color','w');
bar(categories, [data1; data2]', 'Width',0.8); % 分组柱状图(宽度0.8)
colormap(parula); % 设置配色
title('不同类别数据对比','FontSize',12);
ylabel('数值');
legend('组1','组2','Location','northwest');
4. 关联可视化:散点图(变量相关性)
用于展示两个变量的关联关系,函数:scatter(基础散点)、scatter3(三维散点)。
matlab
% 示例:带颜色/大小编码的散点图(展示3维信息)
x = rand(100,1);
y = rand(100,1);
z = x + y; % 第三维信息(用颜色表示)
size_val = z * 50; % 点大小(用大小表示)
figure('Color','w');
scatter(x, y, size_val, z, 'filled'); % filled:填充点
colorbar; % 显示颜色条(对应z值)
xlabel('X'); ylabel('Y');
title('散点图(颜色/大小编码额外信息)');
二、进阶可视化:三维图形
适合展示三维空间数据(如曲面、体积、三维曲线)。
1. 三维曲线:plot3
matlab
% 示例:螺旋线
t = 0:0.01:10*pi;
x = sin(t);
y = cos(t);
z = t;
figure('Color','w');
plot3(x, y, z, 'LineWidth',1.5);
xlabel('X'); ylabel('Y'); zlabel('Z');
title('三维螺旋线');
grid on;
2. 曲面图:surf / mesh(网格图)
matlab
% 示例:绘制z = sin(√(x²+y²))/√(x²+y²) 曲面
[X,Y] = meshgrid(-5:0.1:5, -5:0.1:5); % 生成网格坐标
R = sqrt(X.^2 + Y.^2) + eps; % 避免除以0
Z = sin(R)./R;
figure('Color','w');
surf(X, Y, Z); % 填充曲面
shading interp; % 平滑着色(消除网格线)
colorbar; % 颜色条(对应Z值)
xlabel('X'); ylabel('Y'); zlabel('Z');
title('三维曲面图');
3. 体积可视化:slice(切片图)
适合展示三维体数据(如医学影像、流体仿真):
matlab
% 示例:三维体数据的切片可视化
[X,Y,Z] = meshgrid(-2:0.2:2, -2:0.2:2, -2:0.2:2);
V = X.^2 + Y.^2 + Z.^2; % 体数据(每个坐标点的数值)
figure('Color','w');
slice(X,Y,Z,V, [-1,0,1], [-1,0,1], [-1,0,1]); % 在x/y/z轴的-1/0/1位置切片
colorbar;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('三维体数据切片图');
三、可视化定制化技巧(提升图表美观度)
MATLAB 支持精细化定制图表样式,核心技巧如下:
1. 样式统一设置
matlab
% 全局样式(一次设置,所有图生效)
set(0, 'DefaultFigureColor','w'); % 所有图背景为白色
set(0, 'DefaultLineLineWidth',1.2); % 所有线条宽度1.2
set(0, 'DefaultTextFontSize',11); % 所有文字字号11
set(0, 'DefaultAxesFontName','SimHei'); % 支持中文(需系统有该字体)
2. 颜色与配色
- 内置配色:
colormap(parula)(默认)、colormap(jet)、colormap(viridis)(推荐,色盲友好); - 自定义颜色:用RGB值(如
[0.2 0.4 0.6])或十六进制(如#1f77b4)。
3. 图例/标签优化
matlab
legend({'曲线1','曲线2'}, 'FontSize',10, 'Box','off'); % 关闭图例边框
xlabel('时间 (s)','FontWeight','bold'); % 加粗标签
ylabel('电压 (V)','Rotation',0); % 标签水平显示(默认垂直)
4. 导出高清图片
matlab
% 导出为PNG(300dpi),适合论文/报告
print(gcf, 'figure_name.png', '-dpng', '-r300');
% 导出为矢量图(EPS,无失真)
print(gcf, 'figure_name.eps', '-depsc');
四、实战场景示例
场景1:时间序列数据可视化(多指标对比)
matlab
% 模拟传感器时间序列数据
time = 1:100;
temp = 25 + 5*sin(time/10) + randn(size(time)); % 温度
humidity = 60 + 10*cos(time/15) + randn(size(time)); % 湿度
figure('Color','w');
ax1 = gca; % 主坐标轴
plot(time, temp, 'r-', 'LineWidth',1.5, 'DisplayName','温度');
xlabel('时间 (min)');
ylabel('温度 (℃)','Color','r');
ax1.YColor = 'r'; % 主坐标轴颜色
grid on;
ax2 = axes('Position',ax1.Position, 'XAxisLocation','bottom', 'YAxisLocation','right', 'Color','none');
plot(ax2, time, humidity, 'b-', 'LineWidth',1.5, 'DisplayName','湿度');
ylabel(ax2, '湿度 (%)','Color','b');
ax2.YColor = 'b'; % 次坐标轴颜色
legend([ax1,ax2], 'Location','best');
title('温湿度时间序列');
场景2:地理数据可视化(带坐标的散点)
matlab
% 模拟经纬度数据(如城市点位)
lat = [39.90, 31.23, 23.13, 116.40]; % 纬度
lon = [116.40, 121.47, 113.27, 39.90]; % 经度
value = [500, 800, 600, 900]; % 每个点位的数值(颜色编码)
figure('Color','w');
scatter(lon, lat, 200, value, 'filled');
colorbar;
xlabel('经度'); ylabel('纬度');
title('城市点位数值分布');
% 标注点位名称
text(lon, lat, {'北京','上海','广州','测试点'}, 'HorizontalAlignment','center');
五、关键总结
- 选对绘图函数 :根据数据类型(连续/分类/三维)选择对应函数(
plot/bar/surf等); - 信息最大化:用颜色、大小、子图、双坐标轴等编码更多维度信息;
- 样式标准化:统一字体、颜色、线宽,导出高清格式;
- 交互增强 :可结合
datacursormode(数据游标)、zoom(缩放)、pan(平移)提升交互性。
如果需要针对特定场景(如机器学习结果可视化、信号处理频谱图、图像处理)的示例,可以告诉我,我会补充对应代码!