見出し画像

Pythonでエマグラムと温位エマグラムを描いてみた

はじめに

以前、GMTで温位エマグラムを描いたnoteをエントリーした。ただ、後日追記したのだが、どうも計算がおかしいのでは?と疑問を持っていた。

また先日、PythonからGMT6.xはまだ使えないね、というnoteをエントリーしていた。

ただ、Python使ってエマグラムぐらいはGMT、PyGMTを使わずに書けそうだよね。それなら、再度正しい計算をしてエマグラム、温位エマグラムを書いてみることにした。

正しく計算するためにMetPyを使う

上記のnoteでも紹介したが、PyGMTはまだ天気図を作成することを目的にするには不十分だけど、MetPyには気象関係の様々な計算をサポートしてくれる。

そこで、今回はエマグラムや温位エマグラムを描くのに必要な面倒な計算をMetPyでやってみる。

今回使うのは、MetPyの単位を扱うモジュールと各種計算をしてくれるモジュールの2つ。まずは、これらをインポートする。

>>> from metpy.units import units
>>> import metpy.calc as mpcalc

例えば、温度と湿度から露点温度を計算するには、下記のようになる。

>>> dp = mpcalc.dewpoint_from_relative_humidity(temp * units.kelvin, rh / 100)

ここで、tempは温度(K)、rhは湿度(%)とする。

temp * units.kelvinについて説明する。units.kelvinを付けることで、単位付きのデータQuantityというものに変換されるようだ。

>>> temp * units.kelvin
<Quantity(297.456207, 'kelvin')>

これがなかなか便利で、例えば絶対温度から摂氏に変換するには、下記のようにする。

>>> (temp * units.kelvin).to(units.celsius)
<Quantity(24.3062073, 'degree_Celsius')>

値だけを取り出す、単位だけを取り出すには、

>>> (temp * units.kelvin).to(units.celsius).magnitude
24.306207275390648
>>> (temp * units.kelvin).to(units.celsius).units
<Unit('degree_Celsius')>

とする。このように、簡単に露点温度の計算することができた。

温位エマグラムであれば、温位、相当温位、飽和相当温位の計算が必要になるが、MetPyはこれらの計算もサポートしてくれているので、簡単に計算できる。

>>> pt = mpcalc.potential_temperature(press * units.hectopascal, temp * units.kelvin)
>>> ept = mpcalc.equivalent_potential_temperature(press * units.hectopascal, temp * units.kelvin, dp)
>>> sept = mpcalc.saturation_equivalent_potential_temperature(press * units.hectopascal, temp * units.kelvin)

順に、温位(Potential Temperature)、相当温位(Equivalent Potential Temperature)、飽和相当温位(Saturation Equivalent Potential Temperature)だ。

露点温度dp(Dew Point)はQuantityなのでそのまま渡せる。

matplotlibでグラフを描く

あとは、定番のmatplotlibでグラフを描くだけだ。

データはMSMのGPVデータを使う。

以前、下記のnoteで書いたように、pygribを使えばGPVデータから温度(K)と湿度(%)を取得でき、これらから露点温度、温位、相当温位、飽和相当温位必要が計算できる。

できあがったエマグラムと温位エマグラム。MSMのGPVデータなので予想図ということになる。

画像1

画像2

乾燥断熱線、湿潤断熱線は描いていない。

MetPyにはSkew-T log-P diagram(※)用のプロット機能があり、断熱線を描くことができるようだが、エマグラム用の同様の機能はないようだ。


Skew-T log-P diagramはエマグラムのような状態曲線を描いた図らしく、エマグラムの改良版だそうだ。海外ではよく使われているようだ。

さいごに

GMTでもpsxyを使えば、グラフは描くことができるが、PyGMTは現状ではpsxyをサポートしていない。ただ、matplotlibのような便利なものがあるので、わざわざ面倒なGMTを使う必要はないだろう。

あとは、断熱線が描ければ言うことがないのだが、MetPyは有用だ。これから多用することになりそうだ。

天気図の作図にあたっては、京都大学生存圏研究所の生存圏データベースのGPVデータを使用させて頂いています。

よろしければ、サポートをお願いします。 より多くの方に役立つnoteを書けるよう頑張ります!!