一、前言
在繪圖時,我們有在一張圖上繪制兩條曲線的需求,但是兩條曲線的y值相差較大,此時,可以選擇繪制雙y軸解決該問題。
二、yyaxis功能
建立具有兩個 y 軸的圖
三、函數
1、 yyaxis left
yyaxis left
激活目前坐标區中與左側 y 軸關聯的一側。後續圖形指令的目标為左側。
如果目前坐标區中沒有兩個 y 軸,此指令将添加第二個 y 軸。如果沒有坐标區,此指令将首先建立坐标區。
2、 yyaxis right
yyaxis right
激活目前坐标區中與右側 y 軸關聯的一側。後續圖形指令的目标為右側。
3、 yyaxis(
ax
,___)
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])
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)')
基于右側 y 軸和
hwydata
中的第七列資料建立第二個散點圖。然後為右側 y 軸添加标簽。
pop = hwydata(:,7);
yyaxis right
scatter(ind,pop)
ylabel('Vehicle Miles Traveled (millions)')
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)
基于右側 y 軸繪制兩個線條。
hold
指令同時影響左側和右側 y 軸,是以您不需要再次發出此指令。
完成繪圖後,關閉
hold
。
yr1 = x;
yr2 = x.^2;
yyaxis right
plot(x,yr1)
plot(x,yr2)
hold off
通過激活左側并使用
cla
指令來清除左側。
yyaxis left
cla
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
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
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)