别再截图了!手把手教你用MATLAB Plot函数把Simulink波形导出成论文级图片
在学术写作和工程报告中,清晰规范的图表往往比大段文字更能直观传达研究成果。然而许多研究者仍习惯直接截取Simulink示波器界面,导致图片模糊、格式混乱,最终影响论文的专业性。本文将系统介绍如何通过MATLAB Plot函数,将Simulink仿真数据转化为可直接用于期刊投稿的矢量图,涵盖从数据导出、多图排版到字体美化的全流程技巧。
1. 从Simulink到MATLAB:数据导出的正确姿势
1.1 示波器配置与数据保存
在开始仿真前,必须正确配置Scope模块的数据记录功能。不同于默认设置仅显示波形,我们需要将数据持久化到工作区:
- 右键点击Simulink中的Scope模块,选择Properties
- 在Logging选项卡中勾选
Log data to workspace - 设置变量名为有意义的标识(如
motor_current),格式推荐选择Structure With Time
% 验证数据是否成功导出 whos motor_current % 查看工作区变量信息 plot(motor_current.time, motor_current.signals.values) % 快速预览波形1.2 数据结构解析
Simulink导出的结构体包含两个关键字段:
time:仿真时间序列,通常为N×1的列向量signals:包含所有通道数据的结构数组,每个元素的values字段存储对应信号值
当处理多通道信号时,建议先用
size()函数确认数据维度,避免绘图时出现维度不匹配错误。
2. 基础到进阶:Plot函数的实战技巧
2.1 单图多曲线绘制
MATLAB的plot函数支持在同一坐标系叠加多条曲线,只需连续传入x-y数据对:
figure('Color','white') % 创建白色背景图窗 plot(voltage.time, voltage.signals(1).values, 'LineWidth', 1.5) % 主电路电压 hold on % 保持当前图形 plot(voltage.time, voltage.signals(2).values, '--', 'LineWidth', 1.5) % 参考电压 hold off线型修饰符速查表:
| 符号 | 样式 | 符号 | 颜色 |
|---|---|---|---|
- | 实线 | r | 红色 |
-- | 虚线 | b | 蓝色 |
: | 点线 | g | 绿色 |
-. | 点划线 | k | 黑色 |
2.2 专业级子图排版
使用subplot函数创建多图布局时,需注意保持一致的坐标尺度:
figure('Units','centimeters','Position',[0 0 15 10]) % 设置精确尺寸 % 第一幅子图(电流波形) subplot(2,1,1) % 2行1列的第1个图 plot(current.time, current.signals.values, 'Color',[0 0.447 0.741]) set(gca,'FontName','Times New Roman','FontSize',10) % 统一设置字体 % 第二幅子图(FFT分析) subplot(2,1,2) [freq, amp] = myFFT(current.signals.values); % 自定义FFT函数 stem(freq, amp, 'filled','MarkerSize',3)3. 期刊级图表美化指南
3.1 字体与公式规范
学术期刊通常要求使用Times New Roman字体,MATLAB支持LaTeX语法实现特殊符号:
xlabel('$\it{t}$ (s)','Interpreter','latex','FontSize',11) ylabel('$\mathcal{I}_q$ (A)','Interpreter','latex') title('Current Waveform $\alpha$=0.5','Interpreter','latex')在包含中文标签时,建议使用
\fontname{宋体}混合排版:ylabel({'\fontname{宋体}相电流'; '\fontname{Times New Roman}(A)'})
3.2 精细化样式调整
通过图形对象句柄实现像素级控制:
h = plot(...); % 获取曲线句柄 set(h, 'LineWidth',1.5, 'MarkerEdgeColor',[0.5 0.5 0.5]) ax = gca; ax.XMinorGrid = 'on'; % 启用次要网格线 ax.YLim = [0 10]; % 固定Y轴范围 ax.TickDir = 'out'; % 刻度线方向4. 高效输出工作流
4.1 矢量图导出设置
通过exportgraphics函数生成高质量输出文件:
exportgraphics(gcf,'waveform.pdf','ContentType','vector',... 'Resolution',600,'BackgroundColor','none')常见输出格式对比:
| 格式 | 特点 | 适用场景 |
|---|---|---|
| 矢量格式,无限缩放 | 期刊投稿/印刷 | |
| EPS | 兼容LaTeX的矢量图 | 论文排版 |
| PNG | 位图,文件小 | 网页/PPT展示 |
| SVG | 可编辑的矢量图 | 进一步AI/PS处理 |
4.2 自动化脚本开发
将常用配置封装成函数,实现一键生成标准化图表:
function saveAsJournalFigure(figHandle, filename) set(figHandle,'PaperUnits','centimeters',... 'PaperPosition',[0 0 12 8]) print(figHandle,'-dpdf','-r600',filename) end在实际项目中,我通常会建立模板脚本库,针对不同期刊要求预置各种样式模板。例如IEEE Transactions系列需要特定的线宽和字体大小,而Nature系列更偏好简洁的图表风格。通过copyobj函数可以快速复用已有图形的样式设置到新图形上,大幅提升批量出图效率。