風はベクトル量なので,矢印で描くことが多い。
風のデータには,京都大学生存圏研究所のグローバル大気観測データから提供されているNCEP再解析データを用いる。 月平均気候値から東西風(uwnd.mon.ltm.nc)と南北風(vwnd.mon.ltm.nc)をダウンロードする。
import netCDF4 as nc4
fu = nc4.Dataset('uwnd.mon.ltm.nc')
データセットの次元をしらべてみる。
list(fu.dimensions)
['lon', 'lat', 'level', 'time', 'nbnds']
データセットに含まれている変数名を表示する。
list(fu.variables)
['level', 'lat', 'lon', 'time', 'climatology_bounds', 'uwnd', 'valid_yr_count']
import numpy as np
lon = np.array(fu.variables['lon'])
lat = np.array(fu.variables['lat'])
plev = np.array(fu.variables['level'])
plev
array([ 1000., 925., 850., 700., 600., 500., 400., 300., 250., 200., 150., 100., 70., 50., 30., 20., 10.], dtype=float32)
np.where(plev==850)
(array([2], dtype=int64),)
8月の850 hPaの風を描くことにする。南北風のデータセットも開き読み込む。
uwnd = fu.variables['uwnd'][7][np.where(plev==850)]
fv = nc4.Dataset('vwnd.mon.ltm.nc')
vwnd = fv.variables['vwnd'][7][np.where(plev==850)]
早速描画してみよう。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
plt.figure(figsize=(12,8))
ax = plt.axes(projection=ccrs.PlateCarree())
plt.quiver(lon, lat, uwnd[0,], vwnd[0,], transform = ccrs.PlateCarree())
plt.show()
データ数が多くてなんだかよく分からない。配列のスライスを利用して,間引きをする。4つおきにしよう。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
plt.figure(figsize=(12,8))
ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_feature(cfeature.OCEAN, zorder=0)
ax.add_feature(cfeature.LAND, zorder=0, edgecolor='black')
plt.quiver(lon[::4], lat[::4], uwnd[0,::4,::4], vwnd[0,::4,::4])
plt.show()