matplotlib 使用python从netcdf绘制风矢量

6rvt4ljy  于 2023-06-23  发布在  Python
关注(0)|答案(2)|浏览(92)

我目前在大气/气候物理学实习。我有来自ERA 5(哥白尼)的netcdf数据,我已经绘制了不同的Map,图形等。我需要绘制风矢量图或除底图之外的任何东西,但我不能弄清楚。
我的脚本的这一部分现在看起来像这样:

import xarray as xr
from netCDF4 import Dataset as NetCDFFile 
import matplotlib.pyplot as plt
import numpy as np

import cartopy
import cartopy.feature as cfeat
import cartopy.crs as ccrs

ncw = xr.open_dataset('D:\Stage_IGE_CNRS\ERA5.nc')
nc2 = ncw.sel(time = slice('2016-03-06T06:00:00', '2016-03-31T18:00:00'), level = 1000).mean('time')
    
u = nc2['u']
v = nc2['v']
lon = nc2['longitude']
lat = nc2['latitude']

谢谢你的帮助
托马斯五世

eh57zj3b

eh57zj3b1#

如果你想绘制风 * 矢量 *,你需要从matplotlib中查找quiver()(CartoPy只提供了一个投影感知版本):

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection=ccrs.LambertConformal())
ax.quiver(lon, lat, u, v, transform=ccrs.PlateCarree())

如果你想要风 * 倒钩 *,那么你可以使用barbs()
我们传递ccrs.PlateCarree(),因为看起来你的数据在经度/纬度空间。这意味着在这种情况下,你的风分量是相对于地球的。当调用quiver/barbs时,cartopy假设您的坐标(即x/y或lon/lat)与矢量分量(即u/v)。

lp0sw83n

lp0sw83n2#

对于常规netcdf文件中的特定时间:

import xarray
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

ds = xarray.open_dataset("1988.nc")

u=ds.variables['u10'][:]
v=ds.variables['v10'][:]
lon=ds.variables['longitude'][:]
lat=ds.variables['latitude'][:]

lon2D, lat2D = np.meshgrid(lon, lat)

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.quiver(lon2D, lat2D, u[0,:,:], v[0,:,:]) * insteadt of "0" put any time necessary

相关问题