MATLAB Memo
2. 対数スケールでマッピング(海面クロロフィル-a 濃度)
SeaWiFS の海面クロロフィル-a 濃度を例に、対数スケールでのマッピングを行う方法です。
MATLAB のカラーバーはそのままでは対数スケールに対応しないため、
log10 変換と目盛りラベルの工夫を使って可視化します。
log scale
Chlorophyll-a
SeaWiFS
M_MAP
Mercator
Colorbar
メモ
M_MAP パッケージ
をダウンロードしてパスを通しておきます。旧メモでは
ここでのポイントは、欠損値を
\MATLABのパス\toolbox\local\setup.m で
addpath する方法を使っています。ここでのポイントは、欠損値を
NaN にした上で
log10 変換し、カラーバーの目盛り位置とラベルを
明示的に指定することです。
描画例
SeaWiFS クロロフィル-a 濃度を対数スケールで表示した例。
スクリプト例
旧ページの内容をそのまま整理しています。注釈として重要なポイントだけ強調しています。
(注釈)
・変数 dat2 に SeaWiFS クロロフィル-a データが格納されている。欠損値はここでは 999 にしていた。
・MATLAB のカラーバーは、対数スケールに対応していないので、log10 を使って dat2 を変換する。
cmax=log10(3); cmin=log10(0.01); % 最大・最小値の設定
dat3=double(dat2); dat3(dat3==999)=NaN; dat3=log10(dat3); % 欠損値をNaNに変更し、データをlog10で変換
% a=cptcmap('GMT_wysiwyg', 'ncol',120); % GMTカラーパレットを使うならこれ
a=colormap(jet(100));
a(end,:)=[1 1 1]; % NaN は白抜きにする
m_proj('mercator','lat',[-30 30],'lon',[110 290]); hold on;
m_pcolor(lon2,lat2,dat3); shading flat;
caxis([cmin cmax]);
colormap(a) ; h=colorbar('location','southoutside');
set(h,'xtick',log10([0.01 0.1 1 3]),'xticklabel',[0.01 0.1 1 3],'tickdir','out'); % ラベルとその位置を指定
set(get(h,'xlabel'),'String','Chl-a (mg/m^3)','fontsize',12);
m_coast('patch',[0.4 0.4 0.4]);
m_grid('xaxis','middle');
title([name(1:6) ' SeaWiFS Chl-a'],'fontsize',12,'fontweight','bold');