天天看點

Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

一、前言

在繪圖時,我們有在一張圖上繪制兩條曲線的需求,但是兩條曲線的y值相差較大,此時,可以選擇繪制雙y軸解決該問題。

二、yyaxis功能

建立具有兩個 y 軸的圖

三、函數

1、

yyaxis left

激活目前坐标區中與左側 y 軸關聯的一側。後續圖形指令的目标為左側。

如果目前坐标區中沒有兩個 y 軸,此指令将添加第二個 y 軸。如果沒有坐标區,此指令将首先建立坐标區。

2、

yyaxis right

激活目前坐标區中與右側 y 軸關聯的一側。後續圖形指令的目标為右側。

3、

yyaxis(

ax

,___)

指定 

ax

 坐标區(而不是目前坐标區)的活動側。如果坐标區中沒有兩個 y 軸,此指令将添加第二個 y 軸。

指定坐标區作為第一個輸入參數。使用單引号将 

'left'

 和 

'right'

 引起來。

四、示例

1、建立左右兩側都有 y 軸的坐标區

基于左側 y 軸繪制一組資料的圖。然後使用 

yyaxis right

 激活右側,使後續圖形函數作用于該側。

基于右側 y 軸繪制第二組資料的圖,并為右側 y 軸設定範圍。

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])
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

2、建立具有兩個 y 軸的圖,并為每一側添加标題和軸标簽

從示例檔案 

accidents.mat

 加載矩陣 

hwydata

基于左側 y 軸和 

hwydata

 中的第五列資料建立一個散點圖。

添加标題和軸标簽。

load('accidents.mat','hwydata')
ind = 1:51;
drivers = hwydata(:,5);
yyaxis left
scatter(ind,drivers)
title('Highway Data')
xlabel('States')
ylabel('Licensed Drivers (thousands)')
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

基于右側 y 軸和 

hwydata

 中的第七列資料建立第二個散點圖。然後為右側 y 軸添加标簽。

pop = hwydata(:,7);
yyaxis right
scatter(ind,pop)
ylabel('Vehicle Miles Traveled (millions)')
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

3、在每一側繪制多組資料

使用 

hold on

 指令基于左側 y 軸繪制兩個線條。

x = linspace(0,10);
yl1 = sin(x);
yl2 = sin(x/2);
yyaxis left
plot(x,yl1)
hold on
plot(x,yl2)
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

基于右側 y 軸繪制兩個線條。

hold

 指令同時影響左側和右側 y 軸,是以您不需要再次發出此指令。

完成繪圖後,關閉 

hold

yr1 = x;
yr2 = x.^2;
yyaxis right
plot(x,yr1)
plot(x,yr2)
hold off
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

通過激活左側并使用 

cla

 指令來清除左側。

yyaxis left
cla
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

4、控制每側的顔色

通過将色序設定為您想使用的兩種顔色,為坐标區的每側指定顔色方案。

從 R2019b 開始,可以使用 

colororder

 函數設定色序。

然後,基于左側 y 軸和右側 y 軸分别繪制兩個線條。

添加一個圖例。

colororder({'b','m'})

yyaxis left
y = [1 2; 3 4];
plot(y)

yyaxis right
z = [4 3; 2 1];
plot(z)
legend
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

5、控制單個繪圖顔色

通過設定坐标區每側的色序來控制各個繪圖顔色。

基于左側坐标軸繪制三組條形圖。

通過将左側的色序設定為預設色序,為每個條形序列設定不同的顔色。

yyaxis left
bar(magic(3));
colororder('default')
           

基于右側坐标軸繪制三個散點圖。

通過将色序設定為一個包含顔色名稱的數組,為每個散點圖使用不同顔色。

可以使用 RGB 三元組矩陣指定顔色。然後,添加一個圖例。

yyaxis right
scatter([1 2 3],[2 5 2],'filled')
hold on
scatter([1 2 3],[3 4 1],'filled')
scatter([1 2 3],[4 2 4],'filled')
hold off
colororder({'r','b','c'})
legend
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

6、為特定坐标區添加第二個y軸

從 R2019b 開始,可以使用 

tiledlayout

 和 

nexttile

 函數顯示分塊圖。

調用 

tiledlayout

 函數以建立一個 2×1 分塊圖布局。

調用 

nexttile

 函數以建立坐标區對象 

ax1

 和 

ax2

通過指定 

ax1

作為 

yyaxis

 的第一個輸入,在頂部坐标區中添加第二個 y 軸。

如果不指定坐标區,

yyaxis

 将向目前坐标區添加第二個 y 軸。

x = linspace(1,10);
tiledlayout(2,1)

% Top plot
ax1 = nexttile;
yyaxis(ax1,'left')
plot(ax1,x,sin(x))
yyaxis(ax1,'right')
plot(ax1,x,exp(x))

% Bottom plot
ax2 = nexttile;
plot(ax2,1:10)
           
Matlab之建立雙y軸函數yyaxis一、前言二、yyaxis功能三、函數四、示例

繼續閱讀