- 积分
- 109
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2022-9-8
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2023-3-28 14:56:25
|
显示全部楼层
import matplotlib.pyplot as plt # 引入一些基本库包
import cartopy.crs as ccrs
import numpy as np
import xarray as xr
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import matplotlib.ticker as mticker
filename1= r"E:\shuju\uwnd.2001.nc"
filename2= r"E:\shuju\vwnd.2001.nc"
ds1 = xr.open_dataset(filename1)
ds2 = xr.open_dataset(filename2)
lon = ds1['lon']
lon = lon.loc[72:136] # 选取 lon范围
lat = ds1['lat']
lat = lat.loc[55:0] #选取 lat 范围
lons, lats = np.meshgrid(lon, lat) # 代表的是将x中每一个数据和y中每一个数据组合生成很多点,将这些点的 x坐标放入x中,y坐标放入y中
proj = ccrs.PlateCarree(central_longitude=0) # 选取投影
fig = plt.figure(figsize=(10, 9), dpi=500) # 设置画布
ax = plt.axes([0, 0, 1, 1], projection=proj) # 创建子图
region = [72, 136, 0, 55]
ax.set_extent(region, crs=proj) # 绘图区域设置
u = ds1['uwnd']
u = u.loc['2001-12-22', '200.0', 55:0, 72:136] # 选取同上 参数:time,level,lat,lon
v = ds2['vwnd']
v = v.loc['2001-12-22', '200.0', 55:0, 72:136]
u = np.array(u)
v = np.array(v)
W = ax.streamplot(lons, lats, u, v,density=[0.5,1])
extent=[72,136,0,55] ##经纬度范围
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.2, color='k', alpha=0.5, linestyle='--')#流线绘制
gl.xlabels_top = False ##关闭上侧坐标显示
gl.ylabels_right = False ##关闭右侧坐标显示
gl.xformatter = LONGITUDE_FORMATTER ##坐标刻度转换为经纬度样式
gl.yformatter = LATITUDE_FORMATTER
gl.xlocator = mticker.FixedLocator(np.arange(extent[0], extent[1], 10))
gl.ylocator = mticker.FixedLocator(np.arange(extent[2], extent[3], 10))
##更改刻度字体大小
gl.xlabel_style={'size':22}
gl.ylabel_style={'size':22}
#添加地形海岸线
ax.coastlines('50m',lw=0.5)
#添加标题
plt.title('2001-12-22 200hpa 风速流场图',size=23,color='k')
plt.show()
|
|