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

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

Accedi per commentare.

Risposta accettata

Kojiro Saito
Kojiro Saito il 3 Gen 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 Commento
智希
智希 il 4 Gen 2024
ありがとうございます。
参考にさせていただきます。

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2023a

Community Treasure Hunt

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

Start Hunting!