はじめに

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'})

  • xlabeltitle は両軸共通で設定されます
  • ylabelyyaxis 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にご相談ください。