フィルターのクリア

subplotでy軸のラベル位置を合わせる方法

31 ビュー (過去 30 日間)
ChaosComb
ChaosComb 2021 年 11 月 9 日
回答済み: ChaosComb 2021 年 11 月 9 日
こんにちは.
subplotを用いて,例えば3行1列のグラフを作成する場合,以下の画像のようになったとします.
(縦長で見にくくなってしまってすみません.)
この時,subplot(3, 1, 1)とそれ以外でy軸のラベル位置がずれているのが確認できると思います.
これは,subplot(3, 1, 1)ではplotされる値が正の値のみであるのに対し,subplot(3, 1, 2)では負の値が含まれるため,”-”が描画され,その分だけラベル位置が左に移動しているからだと思います.
今回の画像の場合だと,どれも数値は3桁ですので,それほど変化はありませんが,桁数が異なる場合にはそれだけy軸のラベル位置もずれる事になります.
こう言った場合に,subplot内のラベル位置をプログラム的にそろえることは可能でしょうか?
(エディタで微調整することは可能だと思いますが,それは正直めんどくさいなぁと思っているところです.)

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 11 月 9 日
> subplot内のラベル位置をプログラム的にそろえることは可能でしょうか?
可能です。ylabel関数のオプション引数では調整出来ません。ですが t = ylabel(___) の形で書くと、y 軸ラベルとして使用される text オブジェクトを返すので、このオブジェクトに含まれる位置(Position)を変更すれば、後からエディタで微調整するのと同じ事が出来ます。最も離れたyラベルの位置に合せるのが適当と思うので、下記の例では最小値を設定してみました。
x = linspace(0,10); y1 = abs(300*sin(x)); y2 = 100*sin(x); y3 = 200*cos(x);
subplot(3,1,1); plot(x,y1); t1 = ylabel('Position mm');
subplot(3,1,2); plot(x,y2); t2 = ylabel('Velocity mm/s');
subplot(3,1,3); plot(x,y3); t3 = ylabel('Acceleration mm/s^2');
% ここから:「エディタで微調整」と同じ事をする
temp = min([t1.Position(1),t2.Position(1),t3.Position(1)]);
t1.Position(1) = temp; % 最も離れたyラベルの位置に合せる
t2.Position(1) = temp; % 最も離れたyラベルの位置に合せる
t3.Position(1) = temp; % 最も離れたyラベルの位置に合せる

その他の回答 (1 件)

ChaosComb
ChaosComb 2021 年 11 月 9 日
回答ありがとうございます.
まさに求めていた方法でした.今後も何かあればよろしくお願いいたします!

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

製品


リリース

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!