假如我们想用Matlab绘制这样一幅图:
一条线Y1表示算法的精度,另一条线Y2表示算法的运行时间,两者均随着某一参数X变化,但所代表的是完全不同的事物,无法用同一坐标轴表示。
怎么破?
这时,就需要双轴折线图出场了。
之前我分享过Matlab折线图的绘制模板。
这次我们在其基础上升级一下,画一个双轴折线图。
其原理,主要是通过yyaxis函数分别激活左右两轴、作图。
模板中主要包括六部分内容:
1. 数据准备
此部分主要是读取数据并分配变量。
为了方便演示,这里没有使用真实数据。实际应用时,根据自己的情况调整。
%% 数据准备
% 读取数据
% 自变量X
X = 0:0.05:10;
% 因变量Y1,对应左轴
Y1 = 0.5*exp(-0.5*X).*sin(10*X);
% 因变量Y2,对应右轴
Y2 = fliplr(Y1*10);
*特别提醒:X、Y1与Y2的长度应该是相同的。
2. 线条参数与窗口尺寸设置
一般的毕业论文也好、学术期刊也罢,用的大多是A4纸,去掉边距后,图片宽度一般应小于15cm(单栏)或7.5cm(双栏),图片高度按比例设置。
图片尺寸确定了,可以避免后续图片缩放带来的字号变化问题。
%% 图片尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 12;
figureHeight = 8;
%% 定义线型、标记符号、线宽和颜色
% 定义因变量Y1线型、符号、线宽与颜色
Y1_LS = '-';
Y1_MK = 'none';
Y1_LW = 1.5;
Y1_C = addcolor(185);
% 定义因变量Y2线型、符号、线宽与颜色
Y2_LS = '-';
Y2_MK = 'none';
Y2_LW = 1.5;
Y2_C = addcolor(1);
%% 窗口设置
figureHandle = figure;
set(gcf, 'Units', figureUnits, 'Position',[10 10 figureWidth figureHeight]);
hold on
3. 左轴绘制
首先通过yyaxis left激活左轴,然后按照之前分享的折线图绘制方法生成Y1曲线。
yyaxis left
A1 = line(X,Y1);
set(A1,'LineStyle',Y1_LS,'Marker',Y1_MK,'LineWidth', Y1_LW, 'Color', Y1_C)
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坐标轴刻度标签
4. 右轴折线图绘制
同样的,通过yyaxis right激活右轴,按照之前分享的折线图绘制方法生成Y2曲线。
yyaxis right
A2 = line(X,Y2);
set(A2, 'LineStyle',Y2_LS,'Marker',Y2_MK,'LineWidth',Y2_LW, 'Color', Y2_C)
hYLabel2 = ylabel('Time (s)');
% 坐标区调整
set(gca, 'YColor', [.1 .1 .1],... % 坐标轴颜色
'YTick', -6:2:6,... % 刻度位置、间隔
'Ylim' , [-6 6], ... % 坐标轴范围
'Yticklabel',{[-6:2:6]}) % Y坐标轴刻度标签
*特别提醒:双轴折线图的关键在于两条Y轴坐标范围的调节。
5. 细节调整
为了插图的美观,还需要再增加亿点点细节。
需要调整的内容主要包括:
-
线型、线宽、标记符号、颜色
-
边框、网格、坐标轴、坐标轴刻度及其标签
-
说明文字的字体和字号
6. 图片输出
设置完毕后,以论文所需分辨率、格式输出图片:
print(figureHandle,[fileout,'.png'],'-r600','-dpng');
完成~
下一篇文章会分享Matlab双轴柱状图的绘制模板。
里面会介绍一种我独创的条形图绘图技巧~
模板获取方式:
Matlab出版级论文插图-双轴折线图https://mp.weixin.qq.com/s/qXTBCNuy8Mok50XknC29vQ