contourfの正しいcolorbar設定

R2017aのバージョンで確認済.
今後の仕様変更で改善されるかもしれない.

はじめに

まず,peaksでサンプルデータを作成し,領域を分ける線の値を定義しておく.

% サンプルデータ作成
[x,y,z] = peaks;
% contourfの線の指定
min_level = -6;
max_level = 8;
dz = 2;

デフォルトのcolorbar

contourfにcolorbarコマンドを使用すると,通常は色の表示が離散的にならず,図の着色との対応が不明瞭.また,境界線の下限値未満の値は白抜きになる.

% デフォルトのcolorbar
contourf(x,y,z,min_level:dz:max_level);
axis equal tight
colorbar % デフォルトでは色が連続的な表示になる
contourf_colorbar_default.png

正しい設定方法

colormapで使用する色の数と,caxisで着色範囲を適切に指定してあげることで,境界線の範囲外も含めた正しいcolorbarが作成できる.
白抜き部分が出ないために,線を範囲外にも追加する必要がある.

% 正しいcolorbar表示
figure
contourf(x,y,z,[min(z(:))-1, min_level:dz:max_level, max(z(:))+1]);
caxis([min_level-dz max_level+dz]);
colormap(parula(length(min_level:dz:max_level)+1));
axis equal tight

cb = colorbar; %ハンドルを取得
% colorbarの上端,下端の目盛りラベルの削除
cbticks = cb.Ticks; % 目盛り位置の取得
cbticksL = strsplit(num2str(cbticks,'%.0f '),' ');
cbticksL{1} = ''; cbticksL{end} = ''; % 目盛りラベルを空の文字列にする
set(cb,'Ticks',cbticks,'TickLabels',cbticksL); % 目盛位置とラベルの設定
% ↑setを使わない方法は
% cb.Ticks = cbticks;
% cb.TickLabels = cbticksL;
% contourと比較して確認 
figure
[C,h] = contour(x,y,z,min_level:dz:max_level);
clabel(C,h)
colormap(parula)
axis equal tight

contourf_correct.png contour_with_label.png

参考 MathWorks公式


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-07-11 (Wed) 05:25:49 (194d)