PyGMT プロット
PyGMTはGeneric Mapping Toolsのラッパーです。すべてのメソッドパラメータは、Pythonの完全名(projection)とGMTの一文字エイリアス(J)の両方を受け入れますが、このスキルでは完全名を使用します。グリッド処理関数は、outgrid=Noneの場合にxarray.DataArrayを返すため、結果をプロット関数に直接チェーンできます。
必須の図形式(ハウススタイル)
すべての科学図表は、以下のフォーマットルールに従わなければなりません:
- フレーム:
MAP_FRAME_TYPE='plain'、MAP_FRAME_PEN='1p,black'。フレームを二度描かないこと(フレームを設定するbasemap + プロットの両方で設定しない)。 - パネルラベル: フレーム内の左上隅に大文字(A、B、C...)、括弧なし、太字10p以上、四角い枠線(白色塗りつぶし + 0.8p黒ペン、
clearance='1.5p/1.5p/1.5p/1.5p')。左端と上端から等距離。タイトルテキスト(例:「East」)は上部中央に別途配置。 - 目盛ラベル: 左(W)と下(S)の端のみ。
- カラーバー: 下部に水平、単位ラベル付き、軸ラベルから十分なオフセット(
+o0c/0.8c)。 - カラースケール: 発散する変位には
vik、連続値にはinfernoまたはroma。 - 深度軸は正の値で下向き(断層/断面/3D図のハードルール):深度軸は
0, 20, 40 …(正のキロメートル)とラベル付けしなければならず、0, -20, -40としてはならない。深度は正の値として保存し(深度は下向きに増加)、領域の深度範囲を[0, zmax]に設定し、負の高さで軸を反転させる:2D断面図はprojection="X<w>c/-<h>c"(負の高さ → y軸が下向きに増加)、3D透視図はzsize="-<h>c"(負 → 深部が下部、ラベルは正)。「上が正」を得るために負のzデータを出力しないこと。そうすると深度軸にマイナス記号が付いてしまいます。この方法で3Dのz軸を反転させると、面内の上昇方向ベクトルの垂直成分も符号が反転します(上昇は現在、正の深度が減少することを意味します)。 - フレームの二重描画禁止: サブプロットがフレームを処理するため、パネル内でbasemap(frame=) を呼び出さないこと。
- 自己チェック: 各図を生成した後、それを読み込み/検査します。二重フレーム、クリップされたコンテンツ、一貫性のないラベルをユーザーに表示する前に修正してください。
クイックスタート
import pygmt
fig = pygmt.Figure()
with pygmt.config(MAP_FRAME_TYPE="plain", MAP_FRAME_PEN="1p,black"):
fig.basemap(region=[-125, -114, 32, 42], projection="M12c", frame=["WSne", "xaf", "yaf"])
fig.coast(land="gray90", water="white", shorelines="0.5p,black")
pygmt.makecpt(cmap="vik", series=[-10, 10]) # セッションCPTを設定
fig.plot(x=[-119.5], y=[35.3], style="c0.3c", fill=[5.0], cmap=True, pen="0.5p,black")
fig.colorbar(frame="x+lVelocity (mm/yr)", position="JBC+w8c/0.4c+h+o0c/0.8c")
fig.savefig("map.png", dpi=300, crop=True)
fig.show() でプレビュー、fig.savefig("f.pdf")(ベクター)または .png/.tif(ラスター、dpi=を指定)。
3つのユニバーサルパラメータ
すべてのマップコマンドはこれらを受け取ります。最初のコマンドで設定され、以降のコマンドで再利用されます。
region(R) —[W, E, S, N](順序に注意:西、東、南、北)。"g"/"d"= グローバル。"JP"= ISO国コード。コーナー座標には+rを追加。projection(J) —code[params/]width、widthには単位が必要(c/i/p):"M12c"メルカトル、"X10c/6c"線形、"L-100/35/33/45/12c"ランベルト正角円錐、"G-120/40/12c"正射影。frame(B) —["WSne", "xaf", "yaf+lLabel", "+tTitle"]。大文字の辺 = 軸+目盛+注釈、小文字 = 注釈なし。a=注釈/主目盛、f=補助目盛、g=グリッド。軸ラベル+lはデカルト(X)投影でのみ機能し、地理投影では機能しません。
投影法 / CPTの選択(チートシート)
| ニーズ | 投影法 |
|---|---|
| 地域図(低〜中緯度、InSAR/群発地震) | M メルカトル "M12c" |
| 大陸規模、低歪み | L ランベルト正角円錐 "L lon0/lat0/lat1/lat2/w" |
| 位置図インセット / 半球 | G 正射影 "G lon0/lat0/w" |
| 全球 | W モルワイデ / N ロビンソン / H ハンマー |
| 深度/距離断面 | X 線形、負の高さでy軸が下向き:"X12c/-4c" |
| データの種類 | CPT |
|---|---|
| 発散(変位、速度、異常;ゼロ中心) | vik、roma、broc、polar |
| 連続スカラー | inferno、roma、batlow、viridis、turbo |
| 地形 | geo(陸)、oleron/relief(陸+海)、gray(陰影起伏) |
| 循環(ラップ位相、方位角) | romaO、vikO |
CPTを作成するには pygmt.makecpt(cmap="vik", series=[-50, 50, 5]) を使用します。output= がない場合、これはセッションCPTとなり、後続の grdimage/plot(cmap=True)/colorbar で自動的に使用されます。グリッドの色をヒストグラム均等化するには pygmt.grd2cpt(grid=g, cmap="geo") を使用します。
ハウススタイル(すべての図で適用)
これらはこのスキルの意見が反映されたデフォルト設定です。対象ジャーナルが別の指示をする場合は上書きしてください:
- 描画を
with pygmt.config(MAP_FRAME_TYPE="plain", MAP_FRAME_PEN="1p,black"):でラップします。フレームを二度描かないこと(サブプロット/basemapが処理するため、パネル内でframe=を再渡ししない)。 - 目盛ラベルは W(左) と S(下) の端のみ →
frame=["WSne", ...]。 - パネルラベル:大文字(A、B、C…)、括弧なし、太字10p以上、白い四角い枠線(白色塗りつぶし + 0.8p黒ペン)、左端と上端から等しいオフセット:
fig.text(position="TL", text="A", font="12p,Helvetica-Bold,black", justify="TL", offset="j0.2c", fill="white", pen="0.8p,black", clearance="1.5p/1.5p") - カラーバー:下部に水平、単位ラベル付き、軸ラベルから十分なオフセット:
position="JBC+w8c/0.4c+h+o0c/0.8c"、frame="x+lQuantity (unit)"。 - 発散する変位 →
vik。連続値 →inferno/roma。 - ラスタ解像度 — モアレ禁止(ハードルール):干渉縞/スペックルグリッド(ラップ位相干渉図、コヒーレンス)を画像化する場合、レンダリングされるパネルのピクセル数はグリッドの元の列数以上でなければなりません:
panel_cm × dpi / 2.54 >= n_columns。デフォルト:単一パネルはdpi=400で16cm以上(GMTモダンモード:gmt begin fig png E400)。マルチパネルレイアウトでサンプリング不足になる場合は、縮小する代わりに単一パネルの図に分割します。サンプリング不足の密な干渉縞はモアレ縞にエイリアシングされます — ScanSARのラップ位相パネルで繰り返し発生する失敗モードです。 - 自己チェック:保存後、出力画像を読み取り、二重フレーム、クリップされたコンテンツ、一貫性のないラベル、または密な干渉縞領域のモアレ/グリッド状の偽テクスチャをユーザーに表示する前に修正します。
新しい図を作成するワークフロー
- 上記のチートシートから領域、投影法、CPTを決定します。
- GALLERY.md または
scripts/から最も近いテンプレートを選択し、適応させます。 - ハウススタイルの
configブロック内で描画します。ボトムレイヤー → トップレイヤーの順に構築します(陰影起伏 → 海岸線 → データ → 注釈 → カラーバー)。 fig.savefig(..., dpi=300)(dpi=400以上で、干渉縞/スペックルラスタのピクセル数ルールを確認)、次に画像を読み取り、自己チェックします(上記ステップ7)。
参考文献
- REFERENCE.md — 完全なAPI:図のライフサイクル、coast/plot/text、grdimage/grdcontour/grdview、makecpt/colorbar、データセット、グリッド処理(grdcut/grdgradient/grdtrack/surface…)、xarray、meca、velo、project、subplot/inset/shift_origin/legend。
- GOTCHAS.md — APIドキュメントに記載されていない、コミュニティから寄せられた落とし穴:領域/日付変更線/投影法の罠、セッションCPTの上書きと「zスライスなし」エラー、算術演算後のxarray gtype/registrationリセット、grdimage全面黒、earth_reliefキャッシュ、フォント設定のスコープ、マルチパネルのカラーバー、0.xパラメータの名称変更、Ghostscript/condaインストールの修正。§8 現場で試された罠: インセットのbasemapが注釈/ラベルを削除する(手動で描画するか
shift_originを使用する)。インセットはデフォルトのフレームを強制するため、box="+p"で二重フレームになる。meca +mのMwスケーリングは不可視(ビーチボールを手動でサイズ設定する)。負の深度でmeca(cmap=True)はセグメンテーションフォールト。手書きのrasterio tif →grdimageでセグメンテーションフォールト(代わりにxarrayを使用)。shadingの次元不一致(最初にgrdsample)。インセットのカラーバーラベルオーバーフロー(+mal)。fig.plot(fill="white")で不要な黒い境界線が追加される。§9 ベクトル矢印(style="v"):+g/+hは壊れていません — 矢じりは+e/+bも渡した場合にのみ表示され、ベクトルが矢じりの長さより短いと静かに矢じりが失われ(+n<len>で修正)、+hが1に近いと矢じりが退化して塗りつぶしが消えます。PyGMTの図が誤動作したり、予期せずエラーになった場合はこれを読んでください。 - CRAFT.md — コミュニティの出版技術:ペインターモデルのレイヤー順序、科学的カラーマップ(発散はゼロ中心で対称でなければならない)、陰影起伏の方位角規則、スケールバー/コンパス/経緯線、マルチパネルの位置合わせと共有カラーバー、ベクター vs ラスター出力、地震テクトニクスのレイヤー構成。図を見栄え良くし、投稿準備を整えるためにこれを読んでください。
- GALLERY.md — 13のすぐに適応できるシナリオテンプレート(ベースマップ、マルチパネル、インセット、分類散布図、速度場、ヒストグラム、ローズ図、3D、コンター、断面図、デュアル軸)。
scripts/— 実行可能でパラメータ化されたテンプレート:displacement_map.py、seismicity_map.py、cross_section.py、multipanel_components.py。それぞれデモデータでスタンドアロン実行可能です。上部のCONFIGブロックを編集してください。