- 积分
- 172
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2021-10-8
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
import xarray as xr
import numpy as np
import cartopy
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import matplotlib
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
# 设置全局字体为新罗马
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = ['Times New Roman']
# 设置全局字体权重为normal
plt.rcParams['font.weight'] = 'normal'
# 设置全局字体大小
matplotlib.rcParams['font.size'] = 19 # 设置全局字体大小为12
# 载入数据
data_path = r'D:/pythonProjec/19.nc' # 替换为您的文件路径
ds = xr.open_dataset(data_path)
# 选择特定时间和高度数据
time = '2024-05-19T10:00:00'
level_hPa = 700
ds_selected = ds.sel(time=time,level=level_hPa)
# 获取数据变量
u = ds_selected['u'] # 东西向风速
v = ds_selected['v'] # 南北向风速
q = ds_selected['q'] # 比湿
# 获取经度和纬度,假设这些是坐标维度
longitude = u.longitude
latitude = u.latitude
# 计算水汽通量
qu = q * u # 东西向水汽通量
qv = q * v # 南北向水汽通量
wvf = np.sqrt(qu**2 + qv**2)
# 计算水汽通量散度
div_q = (qu.differentiate('longitude') + qv.differentiate('latitude')) * 10
#选择绘图区域
extents = [107, 111, 31, 35]
crs = ccrs.PlateCarree()
# 创建图形和轴对象
fig = plt.figure(figsize=[8,10])
ax = fig.add_subplot(111, projection=crs)
ax.set_extent(extents, crs)
gl = ax.gridlines(draw_labels=True,
xlocs=np.arange(extents[0], extents[1], 0.5), # 经度位置,包含边界值
ylocs=np.arange(extents[2], extents[3], 0.5),
xformatter=LONGITUDE_FORMATTER,
yformatter=LATITUDE_FORMATTER,
linestyle='--',
linewidth=0)
# 绘制水汽通量散度的阴影图。
mfc_contourf = ax.contourf(longitude,latitude,div_q,cmap='RdBu_r',extend='both')
# 添加颜色条
cb = fig.colorbar(mfc_contourf, ax=ax, label='Water Vapor Flux Divergence ', location='right',pad=0.1,
shrink=0.5, aspect=15)
# 绘制水汽通量等高线图
contour2 = ax.contour(longitude, latitude, wvf, colors='green', linewidths=1, linestyles='-',alpha=1)
c2=plt.clabel(contour2, inline=True, fontsize=10)
#绘制风场箭矢图
# 使用quiver函数需要确保数据的间隔,这里我们每隔2个点取样
Q = ax.quiver(longitude[::2], latitude[::2], u[::2, ::2], v[::2, ::2], scale=300, color="k")
# 说明箭轴长度与风速的对应关系
ax.quiverkey(Q, #传入quiver句柄
X= 0.1, Y = -0.07, #确定 label 所在位置,都限制在[0,1]之间
U = 12, #参考箭头长度 表示12。
angle = 0, #参考箭头摆放角度。默认为0,即水平摆放
label='12m/s', #箭头的补充:label的内容 +
labelpos='E', #label在参考箭头的哪个方向; S表示南边
color = 'k',labelcolor = 'k', #箭头颜色 + label的颜色
)
#加载地图
reader = cartopy.io.shapereader.Reader('D:/pythonProjec/20230206/xx.shp')
provinces = cartopy.feature.ShapelyFeature(reader.geometries(),crs=ccrs.PlateCarree(),
edgecolor='k',
facecolor='none',alpha=1)
ax.add_feature(provinces, linewidth=0.65, zorder=2)
ax.set_title("19-18-700")
plt.savefig("D:/pythonProjec/BTC/1918700.jpg",dpi=500)
|
|