Python関連,  投稿記事

Pythonの練習6

数値計算のoutput等でよく使用されるnetcdf形式のファイルを図面にする練習について書く.

今回は過去に計算した気象モデルWRFによる2018年台風21号の中心気圧に関する図を作成する.

Python上では,時間・行・列という感じでデータが読み取られるので,LANDMASKやLON,LATの情報を読む際には,”0″を指定している(実際にはどの変数も1時刻なので0でよい).

最終的に読んだ変数達を用いて2次元のcontourfとcontour図にしておしまい.

import numpy as np
from netCDF4 import Dataset
import matplotlib.pyplot as plt

# WRFOUTファイルのパス
wrfout_file = "./wrfout_d02_2018-09-04_04_00_00"

# WRFOUTファイルを開く
wrfout = Dataset(wrfout_file, "r")

# データの取得
p = wrfout.variables["PSFC"][:] # 気圧 [Pa]
H = wrfout.variables["HGT"][:] # ジオポテンシャル高度
T = wrfout.variables["T2"][:] # 2m高度気温
MASK = wrfout.variables["LANDMASK"][0,:,:] #Land mask

slp=p*(1-0.0065*H/(T+0.0065*H))**(-5.257)
slp=slp/100

#大きさが1の行列を削除する(あってもなくてもよいが,あった方がclearなコードになる)
slp = np.squeeze(slp)


# 緯度と経度の取得,最初から1列目を0とすると2列目・3列目だけを指定して取れる
lat = wrfout.variables["XLAT"][0, :, :] # 緯度
lon = wrfout.variables["XLONG"][0, :, :] # 経度



# プロット
plt.figure(figsize=(10, 8))
plt.contour(lon, lat, MASK, colors='black')
plt.contourf(lon, lat, slp, np.linspace(950,1000,100), cmap="jet", extend='both')
plt.colorbar(label="Sea level pressure",ticks=np.linspace(950,1000,5)) #範囲を指定して,その間を5個の数値で表現
plt.xlim(130,138)
plt.ylim(30,35.8)

plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("2D Pressure Distribution")

plt.grid()
plt.savefig("test-wrfout.png")

plt.show()

# WRFOUTファイルを閉じる
wrfout.close()


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です