news 2026/6/28 18:45:08

从Simulink到精美图表:利用plot函数定制仿真波形与坐标轴字体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Simulink到精美图表:利用plot函数定制仿真波形与坐标轴字体

1. Simulink仿真数据导出与基础处理

在工程仿真领域,Simulink是使用最广泛的工具之一。但很多新手在完成仿真后,常常会遇到一个难题:如何把仿真结果变成适合论文或报告使用的精美图表?我刚开始用Simulink时也踩过不少坑,后来发现其实只要掌握几个关键步骤,就能轻松实现从原始数据到出版级图表的转换。

首先,在运行仿真前需要对示波器进行简单设置。打开Simulink模型后,找到Scope模块(示波器),右键选择"Block Parameters"。在弹出的窗口中,找到"Logging"选项卡,勾选"Log data to workspace"选项。这里有个小技巧:建议给数据起个有意义的名称,比如"motor_speed"或"voltage_output",而不是简单的"d1"或"out"。这样后续处理时不容易混淆。

仿真运行后,数据会自动保存到MATLAB工作区。在工作区窗口可以看到刚保存的变量,双击打开可以看到内部数据结构。典型的结构包含:

  • time:仿真时间序列
  • signals:包含所有输出信号的数组 每个signal又包含:
  • values:信号值数组
  • dimensions:信号维度
  • label:信号标签(如果有)

我曾经遇到过信号数据找不到的情况,后来发现是因为没有正确设置示波器的保存选项。如果发现工作区没有数据,一定要检查示波器参数设置是否正确。

2. 使用plot函数绘制专业波形图

拿到仿真数据后,下一步就是使用MATLAB的plot函数进行可视化。虽然Simulink自带的Scope也能看波形,但想要做出符合学术出版要求的图表,还是需要手动绘制。

基础绘图代码很简单:

figure plot(d1.time, d1.signals(1).values) grid on xlabel('Time (s)') ylabel('Amplitude') title('Simulation Results')

但实际应用中,我们通常需要更复杂的处理。比如要在一个图中显示多个子图,可以使用subplot函数。我常用的一个技巧是先定义子图布局,再逐个绘制:

figure('Position', [100 100 800 600]) % 设置图窗大小 % 第一个子图 subplot(2,1,1) plot(d1.time, d1.signals(1).values, 'LineWidth', 1.5) grid on title('Output Voltage') % 第二个子图 subplot(2,1,2) plot(d1.time, d1.signals(2).values, 'r--', 'LineWidth', 1.5) grid on title('Current Waveform')

这里有几个实用技巧:

  1. 使用'LineWidth'参数加粗曲线,打印效果更好
  2. 使用不同颜色和线型区分多条曲线
  3. 设置合适的图窗大小,避免默认尺寸不合适

3. 坐标轴字体与样式的深度定制

学术图表对字体格式有严格要求,通常需要:

  • 坐标轴标签使用Times New Roman
  • 中文部分使用宋体
  • 变量名使用斜体
  • 单位使用正体

MATLAB支持通过TeX指令直接控制字体样式。比如:

xlabel('\it\fontname{Times New Roman}Time\rm\fontname{Times New Roman} (s)') ylabel('\it\fontname{Times New Roman}V\rm\fontname{宋体}电压\rm\fontname{Times New Roman} (V)')

这段代码中:

  • \it 开启斜体
  • \fontname{} 设置字体
  • \rm 恢复正体
  • 中英文混排时,需要分别指定字体

我整理了几个常用格式组合:

效果代码示例
斜体英文\it\fontname{Times New Roman}Variable
正体中文\rm\fontname{宋体}电压
带单位\it\fontname{Times New Roman}V\rm\fontname{Times New Roman} (V)
下标\it\fontname{Times New Roman}V_{max}

4. 高级技巧与常见问题解决

在实际应用中,还有一些进阶技巧值得掌握。比如处理大量数据时,直接绘图可能会很慢。这时可以先对数据进行降采样:

% 每10个点取1个 idx = 1:10:length(d1.time); plot(d1.time(idx), d1.signals(1).values(idx))

另一个常见需求是添加图例。当有多条曲线时,建议按以下方式添加:

h1 = plot(t, y1, 'b-', 'LineWidth', 1.5); hold on h2 = plot(t, y2, 'r--', 'LineWidth', 1.5); legend([h1 h2], {'Input', 'Output'}, 'FontName', 'Times New Roman')

导出图片时,分辨率很重要。我通常使用以下设置:

print('-dpng', '-r600', 'output.png') % 600dpi分辨率

如果对默认的线型、颜色不满意,可以自定义颜色:

colors = [0 0.4470 0.7410; % 蓝色 0.8500 0.3250 0.0980; % 橙色 0.9290 0.6940 0.1250]; % 黄色 set(groot, 'defaultAxesColorOrder', colors)

最后提醒一点:MATLAB的图形编辑器虽然可以手动调整样式,但建议尽量通过代码实现所有格式设置。这样不仅可重复使用,也方便批量处理多个图表。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/28 18:41:55

Scannet数据集高效获取指南:从官方脚本到网盘备份

1. Scannet数据集简介与获取痛点 Scannet是当前3D视觉领域最常用的室内场景数据集之一,包含超过1500个真实场景的RGB-D扫描数据。每个场景都提供了完整的3D网格、语义分割标注、实例分割标注以及相机位姿信息,对于3D目标检测、语义分割等任务具有重要价值…

作者头像 李华
网站建设 2026/6/28 18:40:36

大型项目提效方案:Monorepo 多包管理架构与工程化落地指南

大型项目提效方案:Monorepo 多包管理架构与工程化落地指南 在大型 Web 应用的演进过程中,随着业务复杂度的递增,项目往往会拆分为前端应用、全栈后端、公共组件库、通用工具包(Utils)等多个模块。如果采用传统的多代码…

作者头像 李华
网站建设 2026/6/28 18:40:10

深度解析unveilr:2025年高效小程序反编译解决方案

深度解析unveilr:2025年高效小程序反编译解决方案 【免费下载链接】unveilr-v2.0.0 小程序反编译工具 项目地址: https://gitcode.com/gh_mirrors/un/unveilr-v2.0.0 unveilr是一款专业的小程序反编译工具,专为技术开发者和安全研究人员设计。在当…

作者头像 李华
网站建设 2026/6/28 18:39:29

从零到一:用Python手搓国密ZUC流密码算法

1. 初识国密ZUC流密码 第一次听说ZUC算法时,我正为一个物联网项目寻找合适的加密方案。当时被它的"国密"标签吸引,深入了解后发现这个由中国密码学家设计的流密码确实很有意思。ZUC算法全称祖冲之算法,名字来源于我国古代著名数学…

作者头像 李华
网站建设 2026/6/28 18:38:23

3分钟搞定百度网盘秒传:全平台通用的网页黑科技

3分钟搞定百度网盘秒传:全平台通用的网页黑科技 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘文件分享的繁琐操作而烦恼…

作者头像 李华