緯度, 経度の図を面積の大きさを考慮して作りたい
4 views (last 30 days)
Show older comments
下図のような図の作り方をご存知の方いらっしゃいますか
経度, 緯度で表される地点においてそれぞれある値を持ちます。
そこで, 緯度経度の図を作り、その値の大きさに応じて色分けしたいです。
ただし、赤道付近の領域は大きく、極域の領域は小さく表示されるようにしたいです。
よろしくお願いいたします。
5 Comments
Accepted Answer
Kojiro Saito
on 3 Jan 2024
axesmで投影法を指定した後に、surfmやcontourfmで塗りつぶしてプロットします。ここでは緯度経度1°毎にダミーの重力値を入れたメッシュデータを作り、surfmでプロットするサンプルを書きます。
dummyGravityData = repmat(9.825:(-0.0005):9.7805, 360, 1)'; % 極域から赤道へと徐々に減っていく重力値のダミーデータ90°x360°
dummyGravityData = [dummyGravityData; flip(dummyGravityData)]; % データを拡張して180°x360°にする
lonLim=0:1:359;
latLim=-90:1:89;
[lonMesh, latMesh]=meshgrid(lonLim, latLim); % 緯度経度のメッシュデータを作成
% Robinsonの投影法を指定してaxesmを作成
% 緯度、経度ともにグリッド間隔を45°に変更
% 経度はデフォルトでは西経がマイナス値になるので、プラス値で表記するようにMapLonLimitを指定
h = axesm('MapProjection','robinson', 'Grid','on','MeridianLabel','on', 'ParallelLabel','on','MapLonLimit', [0 360],...
'PLineLocation', 45, 'MLineLocation', 45, 'LabelFormat', 'none');
% surfmでメッシュデータを塗りつぶしてプロット
surfm(latMesh, lonMesh, dummyGravityData)
さらに、青→黄→赤でグラデーションするようにデフォルトのカラーマップから変更する必要があります。colormapのドキュメントに詳細がありますが、parulaやjetなどの予め用意されているカラースキームを使うことができますが、今回は貼り付けていただいた画像のRGBの色を抽出して、カスタムのカラーマップを作ってみます。もしGMTなどの他のツールを使ってプロットしている場合、そちらで使っているカラーマップをカスタムカラーマップとしてMATLABで定義することも可能です。
% 青→黄→赤でグラデーションするカラーマップを作成
mymap = [
230 59 49
255 242 169
212 238 244
92 159 198 ] /255;
% 4色を補間して180色にする
cmap = interp1(1:4, mymap, linspace(1,4,180),'linear');
colormap(cmap)
こんな感じでいかがでしょうか。
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!