緯度, 経度の図を面積の大きさを考慮して作りたい

4 views (last 30 days)
智希
智希 on 29 Dec 2023
Commented: 智希 on 4 Jan 2024
下図のような図の作り方をご存知の方いらっしゃいますか
経度, 緯度で表される地点においてそれぞれある値を持ちます。
そこで, 緯度経度の図を作り、その値の大きさに応じて色分けしたいです。
ただし、赤道付近の領域は大きく、極域の領域は小さく表示されるようにしたいです。
よろしくお願いいたします。
  5 Comments
智希
智希 on 3 Jan 2024
ある(緯度, 経度)に対応する地点における重力の大きさです。
緯度、経度1度ずつでメッシュに切っており、各地点で1つの決まった定数値を持っています。
Dyuman Joshi
Dyuman Joshi on 3 Jan 2024
How do you define the values?

Sign in to comment.

Accepted Answer

Kojiro Saito
Kojiro Saito on 3 Jan 2024
投影法についてはこちらのドキュメントにまとまっていますが、赤道付近が広く極域は狭いのはRobinsonやWagner IVなどが該当します。(Mapping Toolboxが必要になります。
axesmで投影法を指定した後に、surfmcontourfmで塗りつぶしてプロットします。ここでは緯度経度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)
こんな感じでいかがでしょうか。
  1 Comment
智希
智希 on 4 Jan 2024
ありがとうございます。
参考にさせていただきます。

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!