#author("2018-07-25T21:53:28+09:00","default:Miyashita","Miyashita")
#author("2019-02-08T12:43:56+09:00","default:Miyashita","Miyashita")
*カラーマップ,カラーバーを対数軸にする [#f83d45bf]
***はじめに [#i694f482]
濃度やスペクトルなど,指数関数的な減少や増加のある分布に対しては,対数軸を使って描画をしたい.という動機でやってみた

***Linear scale [#s3dfc2f7]
下図のような分布(変数A)は,普通に書いてもわかりにくい.
#codeprettify(lang-matlab){{
% Figure 1
figure
surf(A);
axis tight
}}
#codeprettify(lang-matlab){{
% Figure 2
figure
surf(A);
colorbar;
caxis([0 1000])
}}
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/surf_linearscale.png,480x447);
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/pcolor_linearscale.png,480x447);~
***Logarithmic scale [#lf5e40ec]
Aをlogをかけて,colorbarのラベルをいじることで, colorbarの表示も元の値と一致した図ができる.~
Aにlogをかけて,colorbarのラベルをいじることで, colorbarの表示も元の値と一致した図ができる.~
対数軸は0以下がある場合に厄介なのでNaNに置き換える.~
また,ticksという変数で事前にcolorbarの目盛り位置を指定しておく.~
tlabelsは,ticksを元に書き換える目盛りラベルのテキスト,10^{n}を一括で作成している.
#codeprettify(lang-matlab){{
A(A<=0.0) = NaN;
ticks = 0.0:0.5:3.0;
tlabels = [repmat('10^{',[length(ticks),1]),num2str(ticks', '%-.1f'),repmat('}',[length(ticks),1])];
}}
#codeprettify(lang-matlab){{
% Figure 3
figure
pcolor(log10(A));
cb = colorbar;
caxis([min(ticks) max(ticks)])
set(cb,'Ticks',ticks,'TickLabels',tlabels)
% set(cb,...)の代わりに,以下ような書き方でもOK
cb.Ticks = ticks;
cb.TickLabels = tlabels;
%cb.Ticks = ticks;
%cb.TickLabels = tlabels;
}}
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/pcolor_logscale.png,480x447);

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes