在数据分析和科学计算中,Matlab凭借其强大的矩阵运算和可视化能力成为工程师与科研人员的首选工具之一。其中,二维绘图是最常用、最直观的数据呈现方式。本文将带你系统梳理Matlab二维绘图的完整知识链,从最简单的折线图到复杂的多子图排版,从基础语法到高级美化技巧,一篇文章助你从入门直达精通。
一、核心绘图命令:plot的基本用法
二维绘图的基石是`plot`函数。其最基本语法为`plot(x, y)`,其中x和y是长度相等的向量,用于绘制以x为横坐标、y为纵坐标的折线图。
示例:绘制正弦曲线
```matlab
x = 0:0.1:2*pi; % 生成0到2π的100个点
y = sin(x);
plot(x, y);
```
此命令会弹出图形窗口,显示一条平滑的正弦曲线。如需在同一坐标系中绘制多条曲线,只需叠加`plot`函数或使用`hold on`:
```matlab
hold on;
plot(x, sin(x), 'r-'); % 红色实线
plot(x, cos(x), 'b--'); % 蓝色虚线
hold off;
```
二、图形样式控制:颜色、线型与标记
`plot`函数支持通过第三个参数快速指定线条样式。格式为`'颜色-线型-标记'`,例如`'r--o'`表示红色虚线加圆圈标记。
- 颜色:’r‘红色,’g‘绿色,’b‘蓝色,’k‘黑色,’m‘洋红,’c‘青色,’y‘黄色。
- 线型:’-‘实线,’--‘虚线,’:’点线,’-.’点划线。
- 标记:’o‘圆圈,’+‘加号,’*‘星号,’s‘方块,’d‘钻石,’^‘上三角。
建议初学者先记忆常用组合:红色实线’r-‘、蓝色虚线’b--‘、绿色点划线’g-.‘。如需精细控制宽度与大小,可使用属性名-值对:`plot(x, y, 'LineWidth', 2, 'MarkerSize', 6)`。
三、坐标轴与图形标注
没有标注的图形如同没有说明书的产品。Matlab提供了丰富命令来美化坐标轴。
- `xlabel(‘x轴标签’)`和`ylabel(‘y轴标签’)`设置坐标轴名称。
- `title(‘图形标题’)`添加标题。
- `legend(‘曲线1’,’曲线2’)`添加图例,帮助区分多条曲线。
- 坐标轴范围:`xlim([xmin, xmax])` 和 `ylim([ymin, ymax])`。
- 创建网格:`grid on`使背景出现网格线,便于读取数据点。
综合示例:
```matlab
x = -5:0.1:5;
y = x.^2;
plot(x, y, 'b-', 'LineWidth', 2);
xlabel('X轴 (单位)');
ylabel('Y轴 (数值)');
title('平方函数 y = x^2');
grid on;
```
四、高级技巧:多子图与特殊绘图
1. 使用subplot实现多子图布局
当需要在同一窗口中对比多个图形时,使用`subplot(m, n, p)`将窗口划分为m行n列,并在第p个子区域绘图。
示例:一页两图
```matlab
subplot(1,2,1);
plot(x, sin(x)); title('正弦');
subplot(1,2,2);
plot(x, cos(x)); title('余弦');
```
2. 常用特殊二维图
除了折线图,Matlab还支持其他专用绘图函数:
- `bar(x, y)`:柱状图,适合分类数据对比。
- `stem(x, y)`:火柴杆图,适合离散序列。
- `stairs(x, y)`:阶梯图,适合数字信号。
- `area(x, y)`:面积图,突出累积量。
- `histogram(x)`:直方图,分析数据分布。
使用`help 函数名`可随时查阅详细帮助。
五、图形属性精细调整与导出
1. 句柄图形系统
高阶用户可通过图形句柄实现任意美化。例如:
```matlab
h = plot(x, y); % h是线条句柄
set(h, 'Color', [0.5 0.2 0.8], 'LineStyle', ':', 'LineWidth', 3);
```
还可以修改坐标轴、标题等对象的字体名、字号等属性。
2. 图形导出
保存图形有两种常用方式:
- 图形窗口菜单:选择“文件”→“导出设置”,可保存为PDF、PNG、EPS等高质量格式。
- 命令方式:`saveas(gcf, ‘figure.png’)` 或 `print(‘-dpng’, ‘myFigure.png’)`。其中`gcf`代表当前图形窗口句柄。
需注意:科研论文通常推荐导出为矢量图(如PDF、EPS),以保证放大后不失真。
六、实战:综合案例——多曲线混合呈现
下面是一个完整的实战例子,读者可复制运行感受完整流程。
```matlab
% 参数设置
t = 0:0.01:10;
y1 = exp(-0.2*t).*sin(2*t);
y2 = exp(-0.2*t).*cos(2*t);
% 创建图形窗口并设置宽高位置
figure('Position', [100 100 600 400]);
% 绘制主曲线
plot(t, y1, 'r-', 'LineWidth', 2);
hold on;
plot(t, y2, 'b--', 'LineWidth', 1.5);
% 添加标注与修饰
xlabel('时间 (秒)');
ylabel('幅值');
title('衰减振荡曲线对比');
legend('衰减正弦', '衰减余弦');
grid on;
axis([0 10 -1.2 1.2]); % 设置精确范围
% 保存为高分辨率PNG
print('-dpng', '-r300', '衰减振荡图.png');
disp('图形已保存为衰减振荡图.png');
```
运行这段代码将得到一个清晰专业的双曲线对比图,并在工作区生成图片文件。
七、避坑指南:常见错误与优化
1. 忘记点乘:对向量进行乘方或乘法时,必须使用`.*`、`.^`等逐元素运算符。例如`y = x.^2`。
2. figure窗口不更新:`hold on`与`plot`顺序错误。牢记先`hold on`再绘制新曲线。
3. 图例覆盖数据:可使用`legend('曲线1','曲线2','Location','northwest')`指定图例位置。
4. 标签字体太小:绘图后追加`set(gca,'FontSize',12)`调整坐标轴字号。
5. 数据点过于密集:当数据量超过1000点时,建议使用`plot(x(1:100:end), y(1:100:end))`抽样显示,避免图形卡顿。
八、进阶方向:动态图形与交互
当你熟练掌握静态绘图后,可以尝试以下方向:
- 动态更新:使用`drawnow`或`pause`在循环中实时更新线条数据,制作动画。
- 交互式工具:`datacursormode on`可点击图形读取数据点,`ginput`允许鼠标选取坐标。
- 3D绘图入门:`plot3`、`mesh`、`surf`等函数开启三维可视化世界。
通过以上系统学习,你已掌握Matlab二维绘图的全部核心要点。从单条曲线到复杂多子图,从默认样式到精细定制,理论与实践并重。反复练习以上代码,你将彻底告别“画图小白”阶段,在数据可视化之路上自如驰骋。现在就在Matlab中动手试试吧!