Simulink示波器数据怎么用MATLAB画多曲线对比图?一个脚本搞定字体和样式
2026/6/9 20:47:17 网站建设 项目流程

Simulink多曲线对比图高效绘制:从数据提取到样式自动化的完整方案

在工程仿真与数据分析领域,Simulink生成的波形对比是验证模型性能、分析参数影响的关键环节。许多工程师习惯在Simulink示波器中直接观察结果,但当需要将多组仿真数据放在同一坐标系中进行专业对比时,手动调整往往效率低下。本文将分享一套完整的MATLAB脚本解决方案,不仅能自动提取Simulink工作区中的复杂结构体数据,还能实现多曲线对比图的字体、线型、图例等样式的批量标准化设置。

1. Simulink数据的高效提取与预处理

Simulink示波器默认将仿真数据保存为结构体形式,典型结构如d1.signals.values。面对包含数十个信号的复杂模型,手动提取每个信号既繁琐又容易出错。

数据结构的典型组成

d1.time % 时间序列向量 d1.signals % 信号组结构体数组 ├── (1).values % 第一组信号值 ├── (2).values % 第二组信号值 └── ... % 更多信号组

推荐的数据提取方法

% 自动识别信号数量 numSignals = length(d1.signals); % 预分配存储空间 timeData = d1.time; signalData = cell(1, numSignals); for i = 1:numSignals signalData{i} = d1.signals(i).values; end

注意:Simulink默认可能将多维信号存储为N×M矩阵,其中M代表信号通道数。使用前应通过size()函数确认数据维度。

对于包含多种参数组合的批量仿真,建议使用结构体数组或表格形式组织数据:

参数组合仿真时间信号1数据信号2数据...
Case1t1s1_1s1_2...
Case2t2s2_1s2_2...

2. 多曲线对比绘制的核心技巧

基础绘图命令plot配合hold on虽能实现多曲线绘制,但在处理大量数据时会出现性能问题和样式混乱。更专业的做法是:

优化绘图方案对比

方法优点缺点适用场景
循环+hold on简单直观样式管理困难少量曲线(≤5条)
plot矩阵输入单命令绘制共用x轴限制同时间基准的多信号
line函数精细控制每个对象代码量较大需要动态更新的情况
gobjects预分配内存效率高实现复杂超大规模数据(>100条)

推荐的多曲线绘制代码框架

figure('Color','white','Position',[100 100 800 600]); ax = axes('NextPlot','add'); % 等效于hold on但更高效 % 使用ColorOrder和LineStyleOrder实现自动样式循环 ax.ColorOrder = parula(numSignals); % 使用感知均匀的色图 ax.LineStyleOrder = {'-','--',':','-.'}; % 批量绘制 hLines = gobjects(1,numSignals); for k = 1:numSignals hLines(k) = plot(ax, timeData, signalData{k}); end

3. 专业级样式自动化配置方案

学术出版和工程报告对图表样式有严格要求,特别是中英混排时的字体一致性。传统方法需要手动设置每个文本对象,而自动化脚本可大幅提升效率。

字体统一配置函数

function setAxesStyle(ax, fontName, fontSize) % 设置坐标轴统一样式 % ax: 坐标轴句柄 % fontName: 首选字体(如'Times New Roman') % fontSize: 基准字号 % 坐标轴标签和刻度 set(ax, 'FontName', fontName, 'FontSize', fontSize); % 标题设置(支持中英文自动检测) titleObj = get(ax, 'Title'); set(titleObj, 'FontName', fontName, 'FontSize', fontSize*1.2); % 坐标轴标签 xlabelObj = get(ax, 'XLabel'); ylabelObj = get(ax, 'YLabel'); set([xlabelObj, ylabelObj], 'FontName', fontName, 'FontSize', fontSize); % 图例(如果存在) if ~isempty(ax.Legend) set(ax.Legend, 'FontName', fontName, 'FontSize', fontSize*0.9); end end

样式配置参数表

元素属性推荐值
图形窗口Color[1 1 1] (纯白背景)
Position[100 100 800 600] (适中尺寸)
坐标轴Box'on' (封闭边框)
GridLineStyle':' (虚线网格)
线条LineWidth1.5-2.5 (印刷级粗细)
文本Interpreter'tex' (支持特殊符号)

4. 完整自动化脚本实现与实战案例

将上述技术整合为可直接调用的函数,以下是一个经过工程验证的完整解决方案:

simulinkPlotter.m主函数:

function [fig, ax] = simulinkPlotter(dataStruct, varargin) % SIMULINKPLOTTER 自动化绘制Simulink多曲线对比图 % [fig, ax] = simulinkPlotter(d1) 绘制d1结构体中的所有信号 % 可选参数: % 'FontName' - 指定字体(默认'Times New Roman') % 'FontSize' - 基准字号(默认10) % 'LineWidth' - 线宽(默认1.8) % 'ColorMap' - 色图名称(默认'parula') % 参数解析 p = inputParser; addParameter(p, 'FontName', 'Times New Roman', @ischar); addParameter(p, 'FontSize', 10, @isnumeric); addParameter(p, 'LineWidth', 1.8, @isnumeric); addParameter(p, 'ColorMap', 'parula', @ischar); parse(p, varargin{:}); % 数据提取 timeData = dataStruct.time; numSignals = length(dataStruct.signals); signalData = cellfun(@(x) x.values, num2cell(dataStruct.signals), 'UniformOutput', false); % 创建图形 fig = figure('Color','white', 'Position',[100 100 800 600]); ax = axes('NextPlot','add', 'Box','on', 'GridLineStyle',':'); % 设置样式循环 ax.ColorOrder = feval(p.Results.ColorMap, numSignals); ax.LineStyleOrder = {'-','--',':','-.'}; % 绘制曲线 hLines = gobjects(1,numSignals); legendText = cell(1,numSignals); for k = 1:numSignals hLines(k) = plot(ax, timeData, signalData{k}, 'LineWidth',p.Results.LineWidth); legendText{k} = sprintf('Signal %d',k); end % 自动图例(根据信号名称优化) try legend(ax, legendText, 'Location','best'); catch warning('Legend creation failed'); end % 应用字体样式 setAxesStyle(ax, p.Results.FontName, p.Results.FontSize); % 自动调整坐标范围 xlim(ax, 'tight'); yRange = get(ax, 'YLim'); ylim(ax, [yRange(1)-0.05*diff(yRange), yRange(2)+0.05*diff(yRange)]); end

实战应用示例

% 加载Simulink仿真数据 load('motor_simulation.mat'); % 基础调用 [fig1, ax1] = simulinkPlotter(d1); % 高级配置(中文混排场景) [fig2, ax2] = simulinkPlotter(d1, ... 'FontName', 'Microsoft YaHei', ... 'FontSize', 11, ... 'ColorMap', 'jet'); xlabel(ax2, '时间 (s)'); ylabel(ax2, '电流 (A)'); title(ax2, '三相电机电流波形');

对于需要导出出版级图片的情况,推荐增加以下设置:

exportgraphics(fig1, 'comparison.pdf', ... 'ContentType','vector', ... 'Resolution',600);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询