#author("2019-11-19T18:14:30+09:00","default:Miyashita","Miyashita") #author("2019-11-19T18:17:17+09:00","default:Miyashita","Miyashita") *目盛りのフォーマットを揃える [#f7075b8f] #contents **plotboxの軸目盛り [#q3ddc85f] 例えば #codeprettify(lang-matlab){{ figure; plot(peaks./100); }} と実行すると,下図のようにy軸目盛り数値の桁数がバラバラ.~ #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/OrgYTick.png)~ 整数なら整数,小数点なら第○位までと全てを統一したい.~ ~ ~ 【追記】フォーマットを統一するだけなら #codeprettify(lang-matlab){{ ax = gca; }} とすると, #codeprettify(lang-matlab){{ ax.YAxis.TickLabelFormat }} というプロパティがあるので, #codeprettify(lang-matlab){{ ax.YAxis.TickLabelFormat = '%0.2f' }} のようにすれば OK .~ 下記の ax.YTick は ax.YAxis.TickValues のエイリアス??~ ~ ~ 細かく指定するなら #codeprettify(lang-matlab){{ fmt = '%0.2f'; % 表示させたいフォーマット yt = -0.08:0.02:0.10; % 目盛り表示位置と間隔 ax = gca; % カレントのaxes取得 ax.YTick = yt; % 目盛り表示位置の指定 (数値) ax.YTickLabel = num2str(ax.YTick',fmt); % 目盛りラベルの指定 (文字列) }} YTick の指定は必須ではないが,図の余白や大きさ自体が変化したときに目盛り間隔が自動で変わってしまい YTickLabel と整合しなくなるので,~ 同時に指定したほうが無難.~ 自分で指定せず,自動で設定された YTick そのままで良い時も #codeprettify(lang-matlab){{ ax.YTick = ax.YTick; % 目盛り表示位置の指定 (数値) ax.YTickLabel = num2str(ax.YTick',fmt); % 目盛りラベルの指定 (文字列) }} としておく(これ以後目盛りの自動調節はなくなる).~ 出力結果は下図の通り. #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/ArrangedYTick.png)~ 他の軸の場合も ax.XTick とかにするだけ.~ 表示する目盛り位置(数値)を指定してしまっているので,事前にサイズや軸範囲,フォントなど一通りの体裁を修正し,最後にこの操作を行わないと不細工に.~ また,目盛りラベル同士で文字数が異なるとき('1'と'100000'とか)は,char 配列だと短い文字列に無駄な余白ができるので,セル配列にした方が良い. また,目盛りラベル同士で文字数が異なるとき('1'と'100000'とか)は,char 配列だと短い文字列に無駄な余白ができるので,セル配列にした方が良い.~ ~ この方法で,目盛りの値によらず,任意の文字列を挿入できる. ~ ~ **colorbarの目盛り [#c0741f54] colorbarの目盛りについてもほぼ同じ. #codeprettify(lang-matlab){{ figure; pcolor(peaks./100); caxis([-0.10 0.10]) }} を実行すると以下の通り.colobar の目盛りラベルのフォーマットを統一したい. #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/Orgcbticks.png)~ 上記と似たような処理で調整可能だが,colorbarの場合は~ 「Ytick」,「YTickLabel」でなく,~ 「Ticks」,「TickLabels」を使う.なかなか紛らわしい.~ 以下に目盛りの桁数を調整する例を示す.ついでに表示する目盛り位置も指定している. #codeprettify(lang-matlab){{ % フォーマット設定 fmt = '%0.2f'; cbtick = -0.10:0.05:0.10; % 取得・変更 cb = colorbar; cb.Ticks = cbtick; cb.TickLabels = num2str(cb.Ticks',fmt); }} これを実行すれば,目盛り数値の桁も揃い,目盛り間隔も調整できる. #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/ArrangedCBTicks.png)~ ~ **詳細な目盛りの調整 [#z8240526] #codeprettify(lang-matlab){{ % % figure fig = figure; axis off % % colorbar の表示 cb = colorbar; caxis([-10.0 10.0]) % 範囲の調整 set(cb,'FontName','Times','FontSize',12) }} #codeprettify(lang-matlab){{ % % ① 目盛りの位置の設定,最初は桁数がバラバラ cb.Ticks = -10.0:2.5:10.0; % % ② ラベル間で文字列幅が揃うように空白が入る cbtl = num2str(cb.Ticks','%0.1f'); cb.TickLabels = cbtl; % % ③ 空白が入らないようにトリミング cbtl = cellstr(num2str(cb.Ticks','%0.1f')); cbtl = cellfun(@strtrim,cbtl,'Uniformoutput',false); cb.TickLabels = cbtl; % % ④ 単位をつける例 cbtl{end} = [cbtl{end}, ' m']; cb.TickLabels = cbtl; }} &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/cb1.png,101x406); &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/cb2.png,113x406); &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/cb3.png,113x406); &ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/cb4.png,124x406);