绘制双y轴图形,可以进行有效的对比呈现,论文中经常用到。
基本方法有两种:
1、plotyy函数:考虑兼容性,从2016版本之后不推荐使用。
2、yyaxis方式:是MATLAB继plotyy之后推出的画双y轴图形的方式。
1、plotyy函数
plotyy(X1,Y1,X2,Y2)
plotyy(X1,Y1,X2,Y2,function)
plotyy(X1,Y1,X2,Y2,'function1','function2')
plotyy(AX1,___)
[AX,H1,H2]=plotyy(___)
说明
plotyy(X1,Y1,X2,Y2) 绘制 Y1 对 X1 的图,在左侧显示 y 轴标签,并同时绘制 Y2 对 X2 的图,
在右侧显示 y 轴标签。
plotyy(X1,Y1,X2,Y2,function) 使用指定的绘图函数生成图形。
function 可以是指定 plot、semilogx、semilogy、loglog、stem 的函数句柄或字符向量,
或者是能接受以下语法的任意 MATLAB? 函数:
h = function(x,y)
例如,
plotyy(x1,y1,x2,y2,@loglog) % function handle
plotyy(x1,y1,x2,y2,'loglog') % character vector
函数句柄能够用于访问用户定义的局部函数,并能提供其他优势。
plotyy(X1,Y1,X2,Y2,'function1','function2') 使用 function1(X1,Y1) 绘制左轴的数据,
使用 function2(X2,Y2) 绘制右轴的数据。
plotyy(AX1,___) 使用第一组数据的 AX1 指定的坐标区(而不是使用当前坐标区)绘制数据。
将 AX1 指定为单个坐标区对象或由以前调用 plotyy 所返回的两个坐标区对象的向量。
如果您指定向量,则 plotyy 使用向量中的第一个坐标区对象。可以将此选项与前面语法中的任何输入
参数组合一起使用。
[AX,H1,H2] = plotyy(___) 返回 AX 中创建的两个坐标区的句柄,以及 H1 和 H2 中每个绘图的图形
对象的句柄。AX(1) 是左边的坐标区,AX(2) 是右边的坐标区。
2.实例
clc
clear all;
close all
Npoint = 21;
x = linspace(0,10,Npoint);
y1 = sin(x);
y2 = cos(x);
figure
[ax,p1,p2] = plotyy(x,y1,x,y2,'plot','plot');
set(ax(1),'XColor','k','YColor','b'); %设置x轴为黑色,左边y(也就是y1)轴为蓝色
set(ax(2),'XColor','k','YColor','r'); %设置x轴为黑色,右边y(也就是y2)轴为红色
xlabel('X');
ylabel(ax(1),'Y1'); % left y-axis
ylabel(ax(2),'Y2'); % right y-axis
title('The relationship of X, Y1 and X, Y2')
%以下两行分别设置数据y1,y2的线型、颜色、填充点类型及颜色
set(p1,'linestyle','-','marker','o','color','b','MarkerFaceColor','b');
set(p2,'linestyle','- -','marker','^','color','r','MarkerFaceColor','r');
%以下两行分别设置v数据y1,y2的间距大小
set(ax(1),'yTick',[-1:0.2:1]);
set(ax(2),'yTick',[-1:0.1:1]);
运行结果
使用两个 y 轴在一个图上绘制两个数据集。对与左 y 轴关联的数据使用线图。对与右 y 轴关联的数据使用针状图。
程序
clc;
clear all;
close all;
x = 0:0.1:10;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[hAx,hLine1,hLine2] = plotyy(x,y1,x,y2,'plot','stem')
hLine1.LineStyle = '--';
hLine2.LineStyle = ':';
title('Multiple Decay Rates')
xlabel('Time (\musec)')
ylabel(hAx(1),'Slow Decay') % left y-axis
ylabel(hAx(2),'Fast Decay') % right y-axis
运行结果
使用两个 y 轴在一个图表上绘制三个数据集。绘制一个与左 y 轴关联的数据集。使用包含两列的矩阵绘制与右 y 轴关联的两个数据集。
程序
clc;
clear all;
close all;
x = linspace(0,10);
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
y3 = 0.2*exp(-0.5*x).*sin(10*x);
figure
[hAx,hLine1,hLine2] = plotyy(x,y1,[x',x'],[y2',y3']);
运行结果
3.yyaxis函数方式
yyaxis
创建具有两个 y 轴的图
语法
yyaxis left
yyaxis right
yyaxis(ax,___)
说明
yyaxis left 激活当前坐标区中与左侧 y 轴关联的一侧。后续图形命令的目标为左侧。
如果当前坐标区中没有两个 y 轴,此命令将添加第二个 y 轴。如果没有坐标区,
此命令将首先创建坐标区。
yyaxis right 激活当前坐标区中与右侧 y 轴关联的一侧。后续图形命令的目标为右侧。
yyaxis(ax,___) 指定 ax 坐标区(而不是当前坐标区)的活动侧。如果坐标区中没有两个 y 轴,
此命令将添加第二个 y 轴。指定坐标区作为第一个输入参数。使用单引号将 'left' 和 'right' 引起来。
4.实例
程序
clc;
clear all;
close all;
x = linspace(0,10);
y = sin(3*x);
yyaxis left
plot(x,y)
z = sin(3*x).*exp(0.5*x);
yyaxis right
plot(x,z)
ylim([-150 150])
运行结果
创建具有两个 y 轴的图,并为每一侧添加标题和轴标签。从示例文件 accidents.mat 加载矩阵 hwydata。创建 hwydata 中的第五列对左侧 y 轴的散点图。添加标题和轴标签。
程序
clc;
clear all;
close all;
load('accidents.mat','hwydata')
ind = 1:51;
drivers = hwydata(:,5);
yyaxis left
scatter(ind,drivers)
title('Highway Data')
xlabel('States')
ylabel('Licensed Drivers (thousands)')
%创建 hwydata 中的第七列对右侧 y 轴的另一个散点图。然后为右侧 y 轴添加标签。
pop = hwydata(:,7);
yyaxis right
scatter(ind,pop)
ylabel('Vehicle Miles Traveled (millions)')
运行结果
使用 hold on 命令基于左侧 y 轴绘制两个线条。
程序
clc;
clear all;
close all;
x = linspace(0,10);
yl1 = sin(x);
yl2 = sin(x/2);
yyaxis left
plot(x,yl1)
hold on
plot(x,yl2)
运行结果
程序
clc;
clear all;
close all;
x = linspace(0,10);
yl1 = sin(x);
yl2 = sin(x/2);
yyaxis left
plot(x,yl1)
hold on
plot(x,yl2)
%基于右侧 y 轴绘制两个线条。hold 命令同时影响左侧和右侧 y 轴,因此您不需要再次发出此命令。完成绘图后,关闭 hold。
yr1 = x;
yr2 = x.^2;
yyaxis right
plot(x,yr1)
plot(x,yr2)
hold off
运行结果
程序
clc;
clear all;
close all;
x = linspace(0,10);
yl1 = sin(x);
yl2 = sin(x/2);
yyaxis left
plot(x,yl1)
hold on
plot(x,yl2)
%基于右侧 y 轴绘制两个线条。hold 命令同时影响左侧和右侧 y 轴,因此您不需要再次发出此命令。完成绘图后,关闭 hold。
yr1 = x;
yr2 = x.^2;
yyaxis right
plot(x,yr1)
plot(x,yr2)
hold off
% 通过激活左侧并使用 cla 命令来清除左侧。
yyaxis left
cla
运行结果
本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙