假如我们想用Matlab绘制这样一幅图:

一条线Y1表示算法的精度,另一条线Y2表示算法的运行时间,两者均随着某一参数X变化,但所代表的是完全不同的事物,无法用同一坐标轴表示

怎么破?

这时,就需要双轴折线图出场了。

双折线怎么画python 双折线图怎么画_双折线怎么画python


双折线怎么画python 双折线图怎么画_算法_02

这次我们在其基础上升级一下,画一个双轴折线图

其原理,主要是通过yyaxis函数分别激活左右两轴、作图

双折线怎么画python 双折线图怎么画_双折线怎么画python_03

模板中主要包括六部分内容:

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');

双折线怎么画python 双折线图怎么画_算法_04

完成~

下一篇文章会分享Matlab双轴柱状图的绘制模板。