第八星系人气爱 发表于 2024-3-1 10:21:14

Python平均流场图绘制


作者:第八星系-欣妹儿
邮箱:3035245582@qq.com

本代码适用于求取某段时间的平均流场,本文所求为2003年夏季平均流场,可根据需要自行选择研究时间段。

导入库函数
##导入库函数
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.io.shapereader import Reader
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from cartopy.io.shapereader import Reader

读取数据
##读取青藏高原SHP文件
reader = cartopy.io.shapereader.Reader('D:\PAPER\date\qingzhangshp\qingzang.shp')

#读取数据
f=xr.open_dataset('D:\PAPER\date\era52003.nc')#读取风场数据
u=f["u"]#提取U风分量
v=f["v"]#提取V风分量
#u=f['u'].loc['1998-07-19':'1998-07-25'] #取固定时间段的u风分量,下同
#v=f['v'].loc['1998-07-19':'1998-07-25']

lat=f["latitude"]#提取经度
lon=f["longitude"]#提取纬度
u1_mean=np.mean(u,0)#对所选U风场求平均,下同
v1_mean=np.mean(v,0)

绘图
#绘制500百帕高度场,及绘图范围
fig=plt.figure(figsize=(15,10)) #创建画布
proj = ccrs.PlateCarree()
ax1=fig.add_axes(,projection=proj)
ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))#添加海岸线
#ax1 = plt.subplot(2, 2, 1, projection = proj)#可画图组
extent= #选取画图经纬度范围
ax1.set_extent(extent, proj)

ax1.set_xticks(np.arange(extent, extent+1, 5))#设置x轴刻度及间距,下同
ax1.set_yticks(np.arange(extent, extent+1, 5))
ax1.xaxis.set_major_formatter(LongitudeFormatter())
ax1.yaxis.set_major_formatter(LatitudeFormatter())

#标记出青藏高原的范围
provinces = cartopy.feature.ShapelyFeature(reader.geometries(),
                                             crs=ccrs.PlateCarree(),edgecolor='k',
                                             facecolor='gray',alpha=0.3)
ax1.add_feature(provinces, linewidth=0.65, zorder=2)

ax1.set_title('(b)',loc='center',fontsize=18)##设置图片标题、标题位置和标题字号
#绘制流场、设置流场线条粗细、颜色等
q1=ax1.streamplot(lon[::4],lat[::4],u1_mean[::4,::4],v1_mean[::4,::4],density=,transform=ccrs.PlateCarree(),color="black")

#图片保存、展示
plt.savefig('flood2003-a.png', dpi=500)
plt.show()


微信搜索“第八星系人造大气理论爱好者”公众号,关注获取文章数据


页: [1]
查看完整版本: Python平均流场图绘制