You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理NC数据:降低850hPa风矢量图的矢量密度

风矢量图降密解决方案

针对使用NOAA 850 mbar格点风数据绘制风矢量图时出现的矢量过于密集问题,可通过以下几种方式优化:

核心优化方法

1. 直接控制quiver绘制间隔

利用matplotlib的quiver函数step参数,指定x、y方向上每隔多少个原始格点绘制一个矢量,无需修改原始数据:

# 示例:x、y方向每5个格点绘制一个矢量,数值可按需调整
map.quiver(x, y, U1[0,:,:], V1[0,:,:], step=(5,5))

2. 对原始数据切片采样

提前对经纬度网格和U/V风场数据进行切片,只保留部分格点数据,从根源减少矢量数量:

# 示例:每隔4个点取一个数据(步长为4),步长可根据需求调整
slice_step = 4
slice_lon = slice(None, None, slice_step)
slice_lat = slice(None, None, slice_step)

# 生成采样后的网格与风场数据
lons_sampled, lats_sampled = np.meshgrid(lon[slice_lon], lat[slice_lat])
x_sampled, y_sampled = map(lons_sampled, lats_sampled)
U_sampled = U1[0, slice_lat, slice_lon]
V_sampled = V1[0, slice_lat, slice_lon]

# 绘制采样后的矢量
map.quiver(x_sampled, y_sampled, U_sampled, V_sampled)

3. 辅助调整矢量缩放(可选)

增大quiver的scale参数,让矢量更长,配合前两种方法可进一步提升图面清晰度:

map.quiver(..., scale=150)  # scale值越大,矢量越长,可按需调整

修改后的完整代码

from netCDF4 import Dataset as NetCDFFile 
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
from matplotlib.patches import Rectangle
from matplotlib.patches import Polygon
import numpy as np
from mpl_toolkits.basemap import Basemap
from matplotlib import rcParams

fig = plt.figure(figsize=(11,9))
ax = fig.add_subplot(111 )
ax.set_title('(a2)' , size=12 , x=.5, y=.98 ,fontweight='bold') 

nc1 = NetCDFFile('E:/cycle-of-Mjo/NOAA/nc/u850b1.nc')
nc2 = NetCDFFile('E:/cycle-of-Mjo/NOAA/nc/v850b1.nc')
lat = nc1.variables['lat'][:]
lon = nc1.variables['lon'][:]
U1 = nc1.variables['uwnd'][:]
V1 = nc2.variables['vwnd'][:]

map = Basemap(projection='merc', lon_0 =0 , lat_0 =-20 ,llcrnrlon=0., llcrnrlat=-20. ,urcrnrlon=360.,urcrnrlat=61.,resolution='i' ,suppress_ticks=False)

lat_ticks=np.arange(np.ceil(-20.0),int(61.0),20)
lon_ticks=np.arange(np.ceil(0.0),int(360.0),50)
lon_ticks_proj, _=map(lon_ticks, np.zeros(len(lon_ticks)))
_, lat_ticks_proj=map(np.zeros(len(lat_ticks)), lat_ticks)

ax.set_xticks(lon_ticks_proj)
ax.set_yticks(lat_ticks_proj)
plt.tick_params(labelleft=False, labelbottom=False , axis='both',which='major')

map.drawcoastlines()
map.drawcounties() 
parallels = np.arange(-20.,61.,20.)
meridians = np.arange(0,360.,50.)
map.drawparallels(lat_ticks,labels=[1,0,0,0],fontsize=10 , dashes=(0,1), fontweight='bold' )
map.drawmeridians(lon_ticks,labels=[0,0,0,0],fontsize=10, dashes=(0,1) , fontweight='bold')

# 数据切片采样(步长设为4,可按需调整)
slice_step = 4
slice_lon = slice(None, None, slice_step)
slice_lat = slice(None, None, slice_step)
lons,lats= np.meshgrid(lon[slice_lon], lat[slice_lat])
x,y = map(lons,lats)

# 绘制矢量并调整缩放比例
map.quiver(x, y, U1[0, slice_lat, slice_lon], V1[0, slice_lat, slice_lon], scale=150)

plt.savefig('C:/Users/user/Desktop/project/mjo anomalies/SST/vector.png')
plt.show()

内容的提问来源于stack exchange,提问作者Sedighe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:43:19