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

下図のような図の作り方をご存知の方いらっしゃいますか
経度, 緯度で表される地点においてそれぞれある値を持ちます。
そこで, 緯度経度の図を作り、その値の大きさに応じて色分けしたいです。
ただし、赤道付近の領域は大きく、極域の領域は小さく表示されるようにしたいです。
よろしくお願いいたします。

5 comentarios

Dyuman Joshi
Dyuman Joshi el 29 de Dic. de 2023
The best bet is to use axesm to create a map with robinson projection and then use surfm, surfacem, patchm or fillm.
I don't see any other method to color a map in the specific way mentioned.
智希
智希 el 29 de Dic. de 2023
Thank you so much!
Kojiro Saito
Kojiro Saito el 1 de En. de 2024
色分けするための緯度経度ごとのデータはどのようなデータでしょうか?
智希
智希 el 3 de En. de 2024
ある(緯度, 経度)に対応する地点における重力の大きさです。
緯度、経度1度ずつでメッシュに切っており、各地点で1つの決まった定数値を持っています。
Dyuman Joshi
Dyuman Joshi el 3 de En. de 2024
How do you define the values?

Iniciar sesión para comentar.

 Respuesta aceptada

Kojiro Saito
Kojiro Saito el 3 de En. de 2024

3 votos

投影法についてはこちらのドキュメントにまとまっていますが、赤道付近が広く極域は狭いのは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 comentario

智希
智希 el 4 de En. de 2024
ありがとうございます。
参考にさせていただきます。

Iniciar sesión para comentar.

Más respuestas (0)

Productos

Versión

R2023a

Etiquetas

Preguntada:

el 29 de Dic. de 2023

Comentada:

el 4 de En. de 2024

Community Treasure Hunt

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

Start Hunting!