MATLAB 提供了强大且灵活的画图工具,涵盖从基础二维/三维绘图到高级科学可视化、交互式图形编辑等多种功能。
一、基础绘图函数:快速生成各类图形
MATLAB 内置了大量基础绘图函数,支持常见数据类型(向量、矩阵、时间序列等)的可视化。
1. 二维图形
| 函数 | 用途 | 示例代码 |
|---|---|---|
plot |
线图(连续数据) | x = 0:0.1:2*pi; y = sin(x); plot(x, y, 'r-o', 'LineWidth', 1.5); |
scatter |
散点图(离散数据) | x = randn(100,1); y = randn(100,1); scatter(x, y, 50, 'filled', 'MarkerFaceColor', 'b'); |
bar |
柱状图(分类数据) | y = [3, 7, 2, 5]; bar(y, 'FaceColor', [0.2 0.5 0.8]); |
histogram |
直方图(数据分布) | data = randn(1000,1); histogram(data, 20, 'Normalization', 'pdf'); |
pie |
饼图(占比数据) | labels = {'A', 'B', 'C'}; values = [30, 50, 20]; pie(values, labels); |
stem |
茎叶图(离散序列) | n = 0:10; x = 0.5.^n; stem(n, x, 'Marker', 'o', 'BaseValue', 0); |
area |
面积图(累积数据) | x = 0:0.1:1; y = [x; 1-x]'; area(x, y); |
2. 三维图形
| 函数 | 用途 | 示例代码 |
|---|---|---|
plot3 |
三维线图 | t = 0:0.1:10; x = sin(t); y = cos(t); z = t; plot3(x, y, z, 'g-'); |
surf |
三维曲面图(网格+颜色映射) | [X,Y] = meshgrid(-2:0.1:2); Z = X.*exp(-X.^2-Y.^2); surf(X,Y,Z); |
mesh |
三维网格图(仅网格线) | mesh(X,Y,Z); colormap(jet); |
contour |
等高线图(二维投影) | contour(X,Y,Z, 20); colorbar; |
quiver |
矢量场图(箭头表示方向/大小) | [X,Y] = meshgrid(-2:0.5:2); U = X; V = Y; quiver(X,Y,U,V); |
scatter3 |
三维散点图 | x = randn(100,1); y = randn(100,1); z = randn(100,1); scatter3(x,y,z,50,'r*'); |
3. 特殊图形
-
极坐标图 :
polarplot(theta, rho)(如雷达图)matlabtheta = 0:0.01:2*pi; rho = abs(sin(2*theta)); polarplot(theta, rho, 'b-'); -
对数坐标图 :
semilogx(x轴对数)、semilogy(y轴对数)、loglog(双对数)matlabx = logspace(0, 2, 100); y = x.^2; loglog(x, y, 'r--'); -
阶梯图 :
stairs(x, y)(如数字信号)matlabx = 0:0.5:5; y = sin(x); stairs(x, y, 'LineWidth', 2);
二、图形属性设置:美化与定制
通过图形对象句柄 和属性名-属性值对,可精确控制图形的颜色、线型、标签、图例等。
1. 核心图形对象层级
MATLAB 图形采用树状层级结构 ,从顶层到底层依次为:
Figure(图形窗口)→ Axes(坐标轴)→ Line/Patch/Surface(具体图形元素)
通过句柄操作对象,例如:
matlab
fig = figure; % 创建图形窗口,返回句柄 fig
ax = axes(fig); % 在窗口中创建坐标轴,返回句柄 ax
line(ax, x, y, 'Color', 'r', 'LineWidth', 2); % 在坐标轴上画线
2. 常用属性设置
| 属性类别 | 关键属性 | 示例 |
|---|---|---|
| 线条/标记 | Color(颜色)、LineStyle(线型)、LineWidth(线宽)、Marker(标记) |
plot(x,y, 'Color', [0.2 0.5 0.8], 'LineStyle', '--', 'Marker', 'o', 'MarkerSize', 8) |
| 坐标轴 | XLim/YLim/ZLim(范围)、XLabel/YLabel/ZLabel(标签)、Title(标题) |
xlabel('时间 (s)'); ylabel('位移 (m)'); title('运动曲线'); |
| 图例 | legend('字符串1', '字符串2', ...)(添加图例) |
legend('正弦', '余弦', 'Location', 'northwest'); |
| 网格与边框 | GridOn(显示网格)、Box(显示边框) |
grid on; box off; |
| 颜色映射 | colormap(设置色图,如 jet、hot、cool) |
colormap(jet); colorbar;(添加颜色条) |
3. 批量设置属性:set 函数
matlab
h = plot(x, y); % 绘制线图,返回句柄 h
set(h, 'Color', 'b', 'LineWidth', 2, 'Marker', 's', 'MarkerFaceColor', 'y'); % 批量设置属性
三、高级可视化工具:复杂数据与交互
MATLAB 提供了一系列高级工具,支持复杂数据的可视化与交互分析。
1. 多图布局:subplot 与 tiledlayout
-
subplot(m,n,p):将窗口分为m×n个子图,激活第p个(按行优先)。matlabsubplot(2,2,1); plot(x, sin(x)); title('sin(x)'); subplot(2,2,2); plot(x, cos(x)); title('cos(x)'); subplot(2,2,3); plot(x, exp(x)); title('exp(x)'); subplot(2,2,4); plot(x, log(x)); title('log(x)'); -
tiledlayout(推荐):更灵活的多图布局(支持间距调整、共享坐标轴)。matlabt = tiledlayout(2,2); % 2行2列布局 nexttile; plot(x, sin(x)); title('sin(x)'); nexttile; plot(x, cos(x)); title('cos(x)'); nexttile; plot(x, exp(x)); title('exp(x)'); nexttile; plot(x, log(x)); title('log(x)'); t.TileSpacing = 'compact'; % 紧凑间距 t.Padding = 'compact'; % 紧凑内边距
2. 交互式图形工具
MATLAB 图形窗口(Figure)自带交互工具栏,支持:
- 缩放/平移:点击工具栏放大镜/手形图标,或鼠标滚轮缩放、右键拖动平移。
- 数据提示:点击图形元素,显示坐标值(可自定义提示内容)。
- 图形编辑:点击工具栏"编辑绘图"按钮,直接拖拽图形元素、修改属性。
- 测量工具:通过"工具"→"测量"添加距离/角度标注。
3. 专业领域可视化工具箱
- Statistics and Machine Learning Toolbox :
- 箱线图
boxplot、小提琴图violinplot、散点图矩阵gplotmatrix - 热图
heatmap、平行坐标图parallelplot
- 箱线图
- Signal Processing Toolbox :
- 时频图
spectrogram、功率谱密度pwelch、波形图waveform
- 时频图
- Image Processing Toolbox :
- 图像拼接
montage、伪彩色图ind2rgb、3D体绘制volshow
- 图像拼接
4. 动画与动态可视化
通过 animatedline 或 getframe 生成动态图形:
matlab
% 示例:动态绘制正弦波动画
figure; h = animatedline('Color', 'b', 'LineWidth', 2);
axis([0 10 -1 1]); xlabel('x'); ylabel('sin(x)'); title('动态正弦波');
for x = 0:0.1:10
y = sin(x);
addpoints(h, x, y);
drawnow limitrate; % 限制刷新率,避免卡顿
end
四、图形导出与分享
生成的图形可导出为高分辨率图片或矢量图,用于论文、报告等。
1. 导出命令
| 格式 | 命令 | 特点 |
|---|---|---|
| PNG/JPG/EPS | exportgraphics(fig, 'filename.png', 'Resolution', 300) |
支持分辨率设置(默认96 DPI),EPS为矢量图 |
print(fig, 'filename.pdf', '-dpdf', '-bestfit') |
矢量图,适合印刷 | |
| SVG | print(fig, 'filename.svg', '-dsvg') |
可编辑矢量图(需浏览器打开) |
2. 图形窗口直接导出
点击图形窗口菜单栏 "文件"→"另存为",选择格式并设置参数(如分辨率、背景色)。
五、实用技巧与快捷键
- 快速复制图形属性:选中图形元素后,右键"复制属性",再粘贴到其他元素。
- 恢复默认设置 :
reset(gca)(重置坐标轴)、clf(清空当前窗口)。 - 快捷键 :
Ctrl+C/Ctrl+V:复制/粘贴图形元素Ctrl+E:打开绘图编辑器(Plot Editor)↑/↓:在历史命令中切换(快速重复绘图命令)
六、完整示例:综合绘图案例
以下代码生成一个包含多种图形的综合示例,展示 MATLAB 画图工具的灵活性:
matlab
% 生成数据
x = linspace(0, 2*pi, 100);
y1 = sin(x); y2 = cos(x); y3 = sin(2*x);
data = randn(1000, 1);
% 创建图形窗口
figure('Position', [100, 100, 1200, 800], 'Color', 'w');
% 1. 线图与散点图(左上)
subplot(2,3,1);
plot(x, y1, 'b-', 'LineWidth', 1.5); hold on;
scatter(x(1:10:end), y1(1:10:end), 50, 'r', 'filled', 'MarkerFaceAlpha', 0.6);
xlabel('x'); ylabel('sin(x)'); title('线图+散点图');
legend('sin(x)', '采样点'); grid on;
% 2. 柱状图(中上)
subplot(2,3,2);
y = [3, 7, 2, 5, 4];
bar(y, 'FaceColor', [0.3 0.6 0.9], 'EdgeColor', 'k');
xlabel('类别'); ylabel('数值'); title('柱状图');
xticklabels({'A', 'B', 'C', 'D', 'E'});
% 3. 三维曲面图(右上)
subplot(2,3,3);
[X, Y] = meshgrid(-2:0.2:2);
Z = X.*exp(-X.^2 - Y.^2);
surf(X, Y, Z);
shading interp; % 平滑着色
colormap(jet); colorbar;
xlabel('X'); ylabel('Y'); zlabel('Z'); title('三维曲面图');
% 4. 直方图+正态拟合(左下)
subplot(2,3,4);
histogram(data, 20, 'Normalization', 'pdf', 'FaceColor', [0.8 0.2 0.2], 'EdgeColor', 'none');
hold on;
mu = mean(data); sigma = std(data);
x = linspace(min(data), max(data), 100);
plot(x, normpdf(x, mu, sigma), 'k-', 'LineWidth', 2);
title('数据分布与正态拟合'); xlabel('值'); ylabel('概率密度');
% 5. 等高线图(中下)
subplot(2,3,5);
contour(X, Y, Z, 20, 'LineWidth', 1.2);
colormap(hot); colorbar;
xlabel('X'); ylabel('Y'); title('等高线图');
% 6. 饼图(右下)
subplot(2,3,6);
labels = {'苹果', '香蕉', '橙子', '葡萄'};
values = [25, 35, 20, 20];
explode = [0, 0, 0, 1]; % 突出显示"葡萄"
pie(values, explode, labels);
title('水果占比');
% 调整整体布局
sgtitle('MATLAB 综合绘图示例', 'FontSize', 16, 'FontWeight', 'bold');
参考代码 matlab画图工具 www.youwenfan.com/contentcsr/100575.html
总结
MATLAB 画图工具的核心优势在于灵活性 (从基础到高级全覆盖)和易用性(交互式操作+丰富函数库)。通过掌握基础绘图函数、属性设置和高级工具,可高效实现各类数据可视化需求。建议结合具体场景(如科研、工程、教学)选择工具,并通过官方文档 www.mathworks.com/help/matlab/creating_plots.html 深入学习。