はじめに
MATLABでグラフを作っていて、こんな困りごとはありませんか?
「スケールが全然違う2つのデータを、1つのグラフに重ねて比較したい…」
たとえば、-1〜1の範囲で変化するsin波と、0〜600まで急激に増加する指数関数を同じグラフに描こうとすると、hold on で重ねるだけではうまくいきません。スケールが統一されてしまい、sin波がほぼ横一直線に見えてしまいます。
そんなときに役立つのが、yyaxis 関数です。左右に独立した2つのY軸を持つ「二軸グラフ」を簡単に作ることができます。

yyaxisとは?
yyaxis は、1つのグラフに左右2本のY軸を設定できる関数です。
- 左軸(left): 1つ目のデータ用のY軸
- 右軸(right): 2つ目のデータ用のY軸
それぞれのデータが独立したスケールで表示されるため、スケールが大きく異なるデータでも見やすく比較できます。
基本的な使い方
まず、データを準備します。
x = linspace(0, 2*pi, 1000);
y1 = sin(x); % -1〜1のsin波
y2 = exp(x); % 急増する指数関数
次に、yyaxis を使ってグラフを描きます。
figure
yyaxis left % 左軸を選択
plot(x, y1)
yyaxis right % 右軸を選択
plot(x, y2)
yyaxis left を呼ぶとそれ以降のプロット操作が左軸に、yyaxis right を呼ぶと右軸に対応します。これだけで、スケールの異なる2つのデータを1つのグラフに分かりやすく表示できます。
hold on との違い
hold on で2つのデータを重ねた場合、MATLABはY軸のスケールを自動で統一します。指数関数(最大値600前後)に合わせてスケールが設定されるため、sin波(-1〜1)は軸の底付近にほぼ直線として表示されてしまいます。
yyaxis を使うことで、左右のY軸がそれぞれ独立したスケールを持つため、両方のデータの変化を正確に読み取ることができます。
応用:colororderで軸の色をカスタマイズ
yyaxis を使ったとき、デフォルトでは左軸が青、右軸がオレンジで表示されます。視認性を高めたい場合や、特定の色で統一したい場合は、colororder 関数を組み合わせると便利です。

figure
colororder({'k', 'r'}) % 左軸を黒、右軸を赤に指定
yyaxis left
plot(x, y1)
yyaxis right
plot(x, y2)
colororder({'k','r'}) を使用するとき、 yyaxis よりも前に記述するのがポイントです。これで左軸の線が黒(k)、右軸の線が赤(r)で描かれます。
colororderを使用すると、軸のラベルや目盛りの色も、それぞれの軸の色と対応して変化します。色の指定を一度で終えることができるため、非常に便利かと考えます。このように、どちらの軸がどちらのデータを示しているかが一目でわかるグラフになります。
yyaxis使用時のポイントまとめ
| 操作 | コード |
|---|---|
| 左軸に切り替え | yyaxis left |
| 右軸に切り替え | yyaxis right |
| 軸の色を指定 | colororder({'色1', '色2'}) |
xlabelやtitleは両軸共通で設定されますylabelはyyaxis left/yyaxis rightの直後に書くと、それぞれの軸に対応したラベルを設定できます
figure
yyaxis left
plot(x, y1)
ylabel('sin波の値')
yyaxis right
plot(x, y2)
ylabel('指数関数の値')
xlabel('x')
title('二軸グラフのサンプル')
まとめ
- スケールが大きく異なる2つのデータを比較したいときは
yyaxisが便利です yyaxis left/yyaxis rightで左右の軸を切り替えてプロットするcolororderと組み合わせると、左右の軸の色を手軽にカスタマイズできるhold onだけで重ねるとスケールが統一されてデータの変化が見えにくくなるため注意
使う機会はそこまで多くないかもしれませんが、いざというときにとても頼りになる関数だと感じています。
MATLABやLabVIEWでお困りの方は、SCISELにご相談ください。
