続・Python による気象解析入門

格子点型の気象データによる風の矢印 (および、矢羽根) 表示


風の速度は、方向と大きさをもつベクトル量である。 その空間分布を表示するには、矢印や、天気図の矢羽根などがつかわれる。 ここでは、それを Python で作図してみよう。

材料は、 前回の [格子点型の気象データ (JRA-55 海面気圧) の地図上表示] と同様、JRA-55 再解析のうちの、surf125 (地表面の量の緯度・経度1.25度格子データ) をつかう。

Python の Cartopy パッケージのうち、 矢印をかくのには quiver という関数、 矢羽根をかくのには barbs という関数をつかう。 ひとまず、正距円筒図法 (Plate Carree) のばあいにかぎって、 いまのわたしの理解のかぎりで よさそうだと思われる方法を紹介するが、 この方法が模範だと思わないで、よりよい方法をめざしてほしい。


実行方法

Pythonプログラムの例文は、luce の /home/masuda/mapgridwind に置いてある。

各自、つぎのコマンドによって、プログラム例をコピーしてほしい (最後の空白のあとのピリオドが重要)。

cp -r /home/masuda/mapgridwind .

そして、mapgridwind に cd して作業してほしい。

JRA-55のデータは、前回と同様、/home/masuda/jra55/daily/surf125/ に 置いてあるものを読むので、自分のところにコピーする必要はない。 (もし、別のところに置かれたデータを読むばあいは、 プログラムのなかの datapathu, datapathv, datapathval という変数にあたえる文字列を変更する。)


データ

前回の海面気圧をふくめて、2021-01-01 から 2023-06-10 までの毎日4回 (世界時 0, 6, 12, 18時) の、 つぎの気象要素を、時刻ごと・気象要素ごとに別々のファイルに用意した。 (変数名は増田が便宜上きめたもので、かならずしも JRA-55データセットのとおりではない。)


[24a] 東アジア領域の風のベクトル表示

JRA-55 surf125 の u, v のデータにもとづいて、 前回のプログラム例 23c, 23d と同じ、かりに「東アジア領域」と呼んだ 北緯 10~60度、東経 110~170度の範囲で、 風速ベクトルを矢印で表示してみる。 これには、matplotlib の quiver という関数をつかう。 「quiver」という語には、(「ふるえる」という意味もあるが) 矢をいれる入れもの、日本語の「えびら」にあたる意味がある。 quiver 関数は、座標値とベクトル量のリストをあたえて、まとめて多数の矢印をかく機能を もっている。 しかし、そのようなしかたをしたとき、 矢印の長さをデータにもとづいてきめる方法が、 わたしにはよくわからない (ためした結果が期待どおりにならなかった)。 ここでは、(2021, 2022 年度にひきつづき) 暫定的に、格子点ひとつずつ quiver をよびだして、 風速ベクトルにもとづいて長さをきめて矢印をかく方法をとっている。 24a, 24b のプログラムでは、 quiver の scale に 500、width に 0.003 という値をあたえた。 (これは図がみやすいように試行錯誤できめた。)

ついでに、u, v から風速 (風速ベクトルの大きさ) を計算し、 その等値線を contour でひいている。

時刻については、前回の 23b ~ 23e のプログラム例と同様に、 年は固定し、月、日、時 の 3重ループにしてある。 月・日については、monthstart の月の daystart の日から monthend の月の dayend の日までという形で指定する。 時については、例文では「[0]」として、各日 1回 世界時 0時の 値を作図するようにしているが、6時間おきの全部を作図したいならば 「[0, 6, 12, 18]」とすればよい。

プログラムの終わり近くの「plt.show()」が有効になっているので、 図は画面に表示される。図を消す操作をすると次の図が表示される。 「plt.savefig()」をふくむ、頭に「##」を打ってコメントにしてある 5行を有効にすると、図は image というディレクトリの中に PNG 画像ファイルで保存される。

【結果をみた増田の印象。地上の風は実際に海上のほうが陸上よりも強い傾向があるのだが、 JRA-55 の地上 (10 m) 風はそのちがいが強調されすぎていると思う。 別の機会に地上観測の風や他のモデルの風と比較して検討してみたい。 また、海上で風速の大きさが空間的に急にかわる (不連続的である) ことがたびたび見られる。 現実にそうであることもありうるが、データ同化の過程で、観測値が反映されたところと まえの時刻からの予報値が残ったところとのギャップなのかもしれない。】


[24b] 東アジア領域の風のベクトル表示に他の気象要素をかさねる

前回と同じ 海面気圧 の等値線を contour でひいて、風の矢印とかさねてみる。

気圧のかわりに、地上 (2 m) 気温 や、地上 (2 m) 比湿 を表示することもできる。 変更するところはつぎのとおりで、コメント行にしてある。


[25a] 日本中央部領域の風のベクトル表示

前回のプログラム例 23e と同じ、かりに「日本中央部領域」と呼んだ 北緯 30~40度、東経 132~142度の範囲で、 風速ベクトルを矢印で表示してみる。

quiver の scale に 100 という値をあたえた。 width は指定しない (0.005 になっているはず。) そのほかは、24a と同様である。


[25b] 日本中央部領域の風のベクトル表示に他の気象要素をかさねる

空間領域と quiver のオプションは 25a と同様、 そのほかは 24b と同様である。


[26a] 日本中央部領域の風の矢羽根表示

矢印を矢羽根にかえたほかは、25a と同様である。

barbs 関数は、風速を ノット (knot, kt) 単位であたえられたとき、 国際式天気図の約束にしたがった矢羽根をかくようにつくられている。 (短い線が 5ノット、長い線が 10ノット、旗が 50ノット)。

ここでは、風速は m/s 単位であたえられている。 矢羽根は、国際式天気図の約束に近似的にしたがいながら、 m/s 単位できりのよい値でつけることにした。 (短い線が 2.5 m/s、長い線が 5 m/s、旗が 25 m/s)。

矢羽根の凡例をつけるべきなのだが、まだできていない。


今回の課題

[24b] のプログラムを変更して、 データのある期間のうちのある1時刻について、 気圧と風、気温と風、比湿と風の分布図をつくり、 画像ファイルを自分のパソコンに転送して文書ファイルにとりこみ、 簡単な考察をつけて、レポートにして、各セミナー指導教員に e-mail で提出してください。

プログラムの変更箇所

[24b] のプログラムで、気象要素がちがうときに変更する必要があるところを、ヒントだけ書いておく。

ただし、stitle のところは、Python の1つの文が複数の行をあわせてできているとき、 その途中にコメント行がはいるとうまくいかない、という問題があるので、 実際につかいたい気象要素名がはいっている行を、 「syear+'-'+smonth+'-'+sday+' '+shour+' UTC '+\」の行の直前にもってきてほしい。 また、「\」のあとは、空白などをいれずにすぐ改行するようにしてほしい。 【「\」という字は、端末のフォントによって、バックスラッシュ (右下がりの斜線) に見えることと、 円 (日本の通貨) 記号に見えることとがある。 ここではこれが、「Pythonの文がつぎの行に続く」という記号としてつかわれている。】

また、日時をかえるときに変更する必要があるところは、つぎのとおり。

なお、見たい期間が複数の月にまたがるときに連続して見るようにするための改造はちょっと複雑になる。 当面は、月の切れめでくぎってそれぞれ実行し、できた画像ファイルをつなげて見る方法がよいだろう。

天気図との比較

気象庁の地上天気図 (簡略なもの) は、つぎのページから公開されている。 最近数か月より古いものは、 1か月ごとにまとめた PDF ファイルの形になっている。

色の指定

今回の例文では、矢印は blue、等値線は brown という色の指定をしているが、色は変更できる。 Python の matplotlib では、色を RGB ( red, blue, green) の三原色の数値であらわす方法と、 色の名まえで指定する方法がある。 色の名まえについては、(英語だが) つぎのページに一覧がある。


(2022-07-12, 2022-07-13) 2023-06-20
増田 耕一 (MASUDA Kooiti)
増田の [B, F, G 合同セミナーのページ] [立正大学用教材目次] [計算機を利用した気象分野の実習教材目次] [教材目次]