溝端 浩平 / Kohei Mizobata
MATLAB Memo

2. 対数スケールでマッピング(海面クロロフィル-a 濃度)

SeaWiFS の海面クロロフィル-a 濃度を例に、対数スケールでのマッピングを行う方法です。 MATLAB のカラーバーはそのままでは対数スケールに対応しないため、 log10 変換と目盛りラベルの工夫を使って可視化します。

log scale Chlorophyll-a SeaWiFS M_MAP Mercator Colorbar

メモ

M_MAP パッケージ をダウンロードしてパスを通しておきます。旧メモでは \MATLABのパス\toolbox\local\setup.maddpath する方法を使っています。

ここでのポイントは、欠損値を NaN にした上で log10 変換し、カラーバーの目盛り位置とラベルを 明示的に指定することです。

描画例

海面クロロフィル-a 濃度の対数スケールマップ
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');