爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2055|回复: 3

求解画流线图遇到的问题u and v must

[复制链接]

新浪微博达人勋

发表于 2023-3-28 14:49:54 | 显示全部楼层 |阅读模式
4金钱

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 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()
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-3-28 14:58:47 | 显示全部楼层
小白努力学画图 发表于 2023-3-28 14:56
import matplotlib.pyplot as plt  # 引入一些基本库包
import cartopy.crs as ccrs
import numpy as np
...

报错‘u and v must be the same shape’,该怎么改
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2023-3-28 23:49:32 | 显示全部楼层
问题可能出在
  1. u = ds1['uwnd']
  2. u = u.loc['2001-12-22', '200.0', 55:0, 72:136]  # 选取同上 参数:time,level,lat,lon
  3. v = ds2['vwnd']
  4. v = v.loc['2001-12-22', '200.0', 55:0, 72:136]
复制代码

你可以查一下
  1. print("Shape of u:", u.shape)
  2. print("Shape of v:", v.shape)
复制代码
看看是否匹配
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表