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

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

サインインしてコメントする。

採用された回答

Kojiro Saito
Kojiro Saito 2024 年 1 月 3 日
投影法についてはこちらのドキュメントにまとまっていますが、赤道付近が広く極域は狭いのは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 件のコメント
智希
智希 2024 年 1 月 4 日
ありがとうございます。
参考にさせていただきます。

サインインしてコメントする。

その他の回答 (0 件)

タグ

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!