データによってはカラーマップを対数スケールにした方が見やすいこともありますが、設定方法が意外と探しづらいのでここで紹介させてください。
% 適当なデータ作成
m = membrane;
data = exp(10*m);
% 曲面プロット
surf(data)
% カラーバー表示
colorbar
h = gca;
% カラーマップの対応を対数スケールに
h.ColorScale = 'log';
% ついでにフォントサイズ大きく
fontsize(14,'points')
ColorScale プロパティ
これは R2018b で使えるようになった Axes (座標軸) オブジェクトのプロパティです。デフォルト設定だと線形('linear')になっていますが、ここを 'log' に変えることで上のような結果になります。
ColorScale は次の値のいずれかとして指定します。
-
'linear'— 線形スケール。カラーバーの目盛り値も線形スケールを使用します。 -
'log'— 対数スケール。カラーバーの目盛り値も対数スケールを使用します。
R2018a 以前だと カラーマップ,カラーバーを対数軸にする で紹介されている方法が大変参考になります。
ちなみに ColorScale を変更しない('linear' のまま)とこんな絵になります。値が小さい箇所が同じ色になっちゃって小さい変化が見にくいですよね。
% 適当なデータ作成
m = membrane;
data = exp(10*m);
% 曲面プロット
surf(data)
colorbar
fontsize(14,'points')
zscale で z 軸を対数スケールに
そもそも z 軸を対数スケールにしちゃうのも良いかもしれませんね。zscale 関数を使います!これも実は R2023b で使えるようになったばかり。
x 軸、y 軸に関しても xscale 関数、yscale 関数があります。
% 適当なデータ作成
m = membrane;
data = exp(10*m);
surf(data)
colorbar
zscale('log') % z 軸を対数スケールに
h = gca;
% カラーマップの対応を対数スケールに
h.ColorScale = 'log';
fontsize(14,'points')
カラーマップに対しても zscale みたいな cscale 関数があるとコードもシンプルになっていいですね。
ちなみに xscale/yscale/zscale が使えなかった R2023a 以前のバージョンだと、上で ColorScale に対して行った操作と同様に
h.ZScale = 'log';
h.ColorScale = 'log';
と変更しますね。


