MATLABでグラフを作っていると、同じx軸に対してスケールの違う2つの値を重ねて見たい場面があるかと思います。
たとえば、片方は0から100程度の値、もう片方は0から10000程度まで大きくなる値、というような場合です。このようなデータを1つのy軸だけで表示すると、片方の変化が見えにくくなることがあります。
そのようなときに便利なのが、MATLABのyyaxisです。yyaxis leftとyyaxis rightを使うことで、左側と右側にそれぞれy軸を持つグラフを作成できます。
今回の投稿では、さらにcolororderを先に指定しておくことで、左軸と右軸の色をわかりやすく整えています。
この記事のポイント
- MATLABの
yyaxisを使って、左右に異なるy軸を持つグラフを作成します。 colororderで先に色を指定し、左軸と右軸の見た目を整える使い方をお伝えします。
まずは通常のplotで描いてみる
まずは、yyaxisを使用しない場合のプロットを見てみましょう。
以下のコードで、データを可視化してみます。
x = 0:10:100;
y1 = x;
y2 = x.^2;
figure
plot(x,y1,x,y2)
xlabel("x")
ylabel("value")
legend("y1","y2","Location","northwest")
grid on
このデータは、y1が0から100まで直線的に増える値、y2が0から10000まで二次関数的に増える値です。同じx軸に対するデータですが、y方向のスケールが大きく異なっています。
このコードでは、通常のplotで2つの系列を同じy軸に描いています。
この描き方でも2つの系列を重ねることはできまが、y2の最大値が10000であるのに対し、y1の最大値は100です。そのため、同じy軸に描くとy1の変化が下のほうに圧縮され、読み取りにくくなります。
yyaxisで左軸・右軸を切り替える
続いて、yyaxisを使って左右に別々のy軸を用意してプロットする手法です。
以下のコードで実行することができます。
x = 0:10:100;
y1 = x;
y2 = x.^2;
figure
yyaxis left
plot(x,y1)
ylabel("y left")
yyaxis right
plot(x,y2)
ylabel("y right")
xlabel("x")
fontsize(18,"points")
grid onyyaxisを使用することで、2つの軸に分けてデータを表現することができました。

colororderで先に色を指定しておく
あとは色の設定です。
二軸Yプロットでは、色を分けて描きたい…場合が多くあると感じていますが、プロットした後に軸や諸々の色を変えようとするのは大変です。
そんな時に便利なのが、coloroder関数です。
この関数を使用すると、冒頭の一か所に記載しておくことで、好みの軸色に変更することができます。
以下のコードを動作させると、第一軸が黒、第二軸が赤で表現できます。
x = 0:10:100;
y1 = x;
y2 = x.^2;
figure
color(1) = "k";
color(2) = "r";
colororder(color)
yyaxis left
plot(x,y1)
ylabel("y left")
yyaxis right
plot(x,y2)
ylabel("y right")
xlabel("x")
fontsize(18,"points")
grid on
yyaxisとcoloroderに関する補足
colororderについて補足すると、この関数はグラフで使う色の順序を先に指定するときに便利です。
例えば、1つ目の色に黒、2つ目の色に赤を指定するとします。yyaxisを使う二軸グラフでは、左側の軸と右側の軸に対応する色がグラフの見やすさに大きく関わります。
添付図では、左軸側の直線が黒、右軸側の曲線が赤で表示されています。右側のy軸ラベルや目盛りも赤になっているため、「赤い曲線は右側の軸を読む」という関係が直感的にわかるかと考えます。
また、yyaxisの基本的な流れがわかり難い…という方は、次のようにシンプルな例で、考えるとわかりやすいかと考えます。
yyaxis left plot(x,y1) yyaxis right plot(x,y2)
yyaxis leftを実行した後の描画コマンドは左側のy軸に対応します。続いてyyaxis rightを実行すると、以降の描画コマンドは右側のy軸に対応します。
yyaxisは「これからどちら側の軸に対して描画するか」を切り替えるための関数だと考えられます。
二軸グラフでは、左右のy軸でスケールが異なるため、色の対応が曖昧だと読み手が混乱しやすくなります。そのため、今回のように先にcolororderで色を指定しておく方法は、とても便利だと感じています。
ただし、二軸グラフは便利な一方で、使い方によっては関係性を強く見せすぎてしまうこともあるので注意が必要だと考えます。左右の軸の単位やスケールが違う場合は、軸ラベルを明確にする、凡例を入れる、必要に応じて別々のグラフに分ける、といった考えかたも重要だと考えます。
今回のような図では、左右の軸ラベルをそれぞれy left、y rightと付け、さらに色で対応を示しているため、二軸グラフの基本を確認する例としてわかりやすい形になっているかと考えます。
MATLABのグラフ作成は、関数の使い方だけでなく、「読み手がどこを見ればよいか」を整えることも大切だと考えます。yyaxisやcolororderのような基本機能でも、少し書き方を工夫するだけで、説明しやすい図に近づけられます。もしMATLABの可視化やコード整理で迷う場面がありましたら、SCISELでも部分的な相談やレビューの形でお手伝いできるかと考えます。
SCISEL
MATLAB LabVIEWで困った方へ 支援・代行により研究や開発のサポートを行います
よくある質問
Q. yyaxisは何をする関数ですか?
A. 左右2つのy軸を持つグラフを作成し、yyaxis leftまたはyyaxis rightで描画先の軸を切り替える関数です。
Q. colororderは必ず必要ですか?
A. 必須ではありません。ただし、左右の軸や系列の色を意図的にそろえたい場合は、先に指定しておくと見やすいグラフになります。
Q. 通常のplotではなぜ見えにくくなることがありますか?
A. 2つの系列のスケールが大きく異なると、値の小さい系列が同じy軸上で圧縮されてしまうためです。今回の例では、y1が0から100、y2が0から10000なので、通常のプロットではy1の変化が読み取りにくくなります。
Q. 二軸グラフはどんなときに使うとよいですか?
A. 同じx軸に対して、スケールの異なる2つの量を比較したいときに便利です。一方で、単位やスケールの違いが誤解を生まないよう、軸ラベルや色の対応を明確にすることが大切です。
