文章目录
- 概要
- 整体架构流程
- 技术名词解释
- 技术细节
- 小结
概要
本文提供一套完整可直接运行的 MATLAB双 Y 轴折线图代码,使用yyaxis实现左右双坐标轴,两套数据量纲差异大也可放在同一张图展示。内置自定义科研配色、精细化坐标轴美化、横向图例微调、600DPI 超高分辨率图片导出,画布16:9。适合论文绘图,只需替换data.mat数据集即可快速复用。
整体架构流程
- 执行
clear;clc;close all清空环境,避免旧图、旧变量干扰。 load读取data.mat,获取共用横坐标X,两组纵坐标Y1、Y2。- 定义 RGB 科研配色矩阵,分别给两条曲线分配颜色。
- 设置画布单位厘米,配置 16:9 画布尺寸,创建绘图窗口。
yyaxis left激活左侧 Y 轴,绘制第一条曲线,配置左轴刻度、范围、标签。yyaxis right激活右侧 Y 轴,绘制第二条曲线,配置右轴刻度、范围、标签。- 设置 X 轴范围、刻度;关闭多余边框,配置网格、刻度方向。
- 添加横向图例,手动微调图例位置避免遮挡曲线;统一设置 Arial 字体、字号、标题加粗。
- 设置画布白色背景,配置打印纸张参数。
- print 函数输出 600DPI 高清 PNG 图片保存到工作目录。
技术名词解释
- yyaxis left / yyaxis right:MATLAB 双 Y 轴绘图命令,切换当前作用的坐标轴;left 对应左侧纵轴,right 对应右侧纵轴,两套 Y 轴可以独立设置范围、刻度。
- line():底层画线函数,比 plot 更适合精细控制线条属性:线宽、线型、颜色,返回图形句柄方便后续操作图例。
- 句柄 (handle):
A1、A2、hLegend、hXLabel均为图形句柄,通过 set 函数修改图形对象参数。 - Legend Position:图例 Position 是 [left,bottom,width,height] 归一化坐标,可以手动偏移微调图例摆放位置。
- ‑r600:输出图片分辨率,数值越大图片越清晰,论文常用 300‑600DPI。
- PaperPosition:打印输出画布尺寸,必须和 figure 窗口 Position 保持一致,防止导出图片拉伸变形。
技术细节
数据集说明
data.mat内部变量:
X:1×201 double,共用 x 轴坐标Y1:1×201 double,绑定左侧 Y 轴Y2:1×201 double,绑定右侧 Y 轴
注意:双轴图两组 Y 数据量纲可以完全不一样,左轴范围
[-0.6,0.6],右轴范围[-6,6]。
配色
C_all = [ 0.0353 0.1569 0.2353 0.2353 0.7843 0.7529 0.9490 0.9216 0.7333];C1取第一行给 Y1 曲线;C2取第二行给 Y2 曲线。
关键绘图参数
% 线条设置 'Style','-' % 实线 'Marker','none' % 不绘制标记点 'LineWidth',1.5 % 线条宽度1.5坐标轴配置
- 左 Y 轴:范围
[-0.6,0.6],步长 0.2;标签Acurracy (%) - 右 Y 轴:范围
[-6,6],步长 2;标签Time (s) - X 轴:当前设置
[0,10],步长 2;注意:你的原始 X 数据最大只有 0.85,这里需要根据真实数据修改 XLim、XTick,否则曲线会挤在最左侧 - 美化:关闭 box 边框,仅 Y 轴开启网格;刻度向外
TickDir out。
图例设置
横向图例orientation','horizontal,位置东北northeast;通过 Position 数组做微小偏移,避免图例压曲线。
字体输出
全部使用 Arial 字体;坐标轴 10 号,标签、图例 11 号,标题 12 号加粗。画布背景纯白。
图片输出
画布尺寸:宽 16cm,高 9cm;输出分辨率 600DPI,输出文件名:双轴折线图.png。
完整代码
clear; clc; close all; %% 数据准备 % 读取数据 load('data.mat'); % X:1×201,共用横坐标 % Y1:1×201,第一组 y % Y2:1×201,第二组 y %% 颜色定义 C_all = [ 0.0353 0.1569 0.2353 0.2353 0.7843 0.7529 0.9490 0.9216 0.7333]; C1 = C_all(1,:); C2 = C_all(2,:); %% 图片尺寸设置(单位:厘米) figureUnits = 'centimeters'; figureWidth = 16; figureHeight = 9; %% 窗口设置 figureHandle = figure; set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]); %% 双轴折线图绘制 % 左轴 yyaxis left A1 = line(X,Y1); set(A1, 'LineStyle','-','Marker','none','LineWidth', 1.5, 'Color', C1) hYLabel1 = ylabel('Acurracy (%)'); % 坐标区调整 set(gca, 'YColor', [.1 .1 .1],... % 坐标轴颜色 'YTick', -0.6:0.2:0.6,... % 刻度位置、间隔 'Ylim' , [-0.6 0.6], ... % 坐标轴范围 'Yticklabel',{-0.6:0.2:0.6}) % Y坐标轴刻度标签 % 右轴 yyaxis right A2 = line(X,Y2); set(A2, 'LineStyle','-','Marker','none','LineWidth', 1.5, 'Color', C2) hYLabel2 = ylabel('Time (s)'); % 坐标区调整 set(gca, 'YColor', [.1 .1 .1],... % 坐标轴颜色 'YTick', -6:2:6,... % 刻度位置、间隔 'Ylim' , [-6 6], ... % 坐标轴范围 'Yticklabel',{-6:2:6}) % Y坐标轴刻度标签 %% X轴与其它细节调整 hXLabel = xlabel('XAxis'); hTitle = title('Daxis line Plot'); set(gca, 'Box', 'off', ... % 边框 'XGrid', 'off', 'YGrid', 'on', ... % 网格 'TickDir', 'out', 'TickLength', [.01 .01], ... % 刻度 'XMinorTick', 'off', 'YMinorTick', 'off', ... % 小刻度 'XColor', [.1 .1 .1],... % 坐标轴颜色 'XTick', 0:2:10,... % 刻度位置、间隔 'Xlim' , [0 10], ... % 坐标轴范围 'Xticklabel',{0:2:10}) % X坐标轴刻度标签 % Legend hLegend = legend([A1,A2], ... 'Y1', 'Y2', ... 'Location', 'northeast','orientation','horizontal'); % Legend位置微调 P = hLegend.Position; hLegend.Position = P + [0.01 0.03 0 0]; % 字体和字号 set(gca, 'FontName', 'Arial', 'FontSize', 10) set([hLegend, hXLabel, hYLabel1, hYLabel2], 'FontSize', 11, 'FontName', 'Arial') set(hTitle, 'FontSize', 12, 'FontWeight' , 'bold') % 背景颜色 set(gcf,'Color',[1 1 1]) %% 图片输出 figW = figureWidth; figH = figureHeight; set(figureHandle,'PaperUnits',figureUnits); set(figureHandle,'PaperPosition',[0 0 figW figH]); fileout = '双轴折线图'; print(figureHandle,[fileout,'.png'],'-r600','-dpng');