【Python】mpl_toolkitsのBasemapで等高線だけが表示されない原因

Pythonを使って等高線を描こうとしていたときに,X, Y, Zのデータを間違いなく準備できているのになぜか等高線が描けないという問題があったのですが,その原因が分かりにくかったので備忘録として残しておきます。

現象(等高線が表示されない例)

こういう風にグリッドデータを用意して等高線を描こうとしても何故か等高線だけが描けないという状況でした。

このソースでの表示結果はこうなります。

何故か等高線だけが描かれません。

ちなみにx, y, zのデータはこんな感じで正常に作成されています。

この状態で数時間ドツボっていたのですが,いざ解決してみるとものすごく単純な話だったようです。

解決方法

正しく等高線が描ける全ソースは以下の通りです。

結果はこんな感じで等高線が描かれています。

最初の例で等高線が描かれなかったのは,正しく動くソースの28行目のBasemap用のデータに変換する処理が抜けていたためです。

普通の感覚では緯度・経度とそこの値を単純に配列で用意すれば等高線が描けそうですが,Basemapを使う場合は緯度・経度の座標をBasemap用の値に変換しないといけないようです。

今回はメルカトル図法で描いたのでその処理の必要性がイマイチ分かりませんでしたが,正距方位図法といったような図を描く場合があることを考えると,確かに単純な緯度・経度から専用のデータに変換してやる必要があるのかなという気はしますね。

ちなみに,pyplotのcontour(contourf)で等高線を描くときはこのような処理は必要ありません。そのせいで,余計にドツボっていたという背景もありますが…。

スポンサーリンク