爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5974|回复: 4

MeteoInfoLab脚本示例:随高度分布的平均场

[复制链接]

新浪微博达人勋

发表于 2016-1-1 16:10:02 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MeteoInfo 于 2020-4-11 19:09 编辑

气象分析中经常会用到某个变量在某个矩形范围内沿经度或纬度方向平均场的垂直分布。这里有两个例子,第一个例子是“正矩形”,第二个例子是“斜矩形”(用到格点场的旋转,参考此例:http://bbs.06climate.com/forum.p ... 1110&extra=page%3D1)。

脚本1:
  1. f = addfile('D:/Temp/nc/uwnd.2011.nc')
  2. data = f['uwnd'][0,:,'10:40','70:130']
  3. data = mean(data, axis=1)
  4. lev1 = data.dimvalue(0)
  5. #lev2 = 1000 - lev1
  6. lev2 = meteo.pressure_to_height_std(lev1)
  7. levels = []
  8. for j in range(0, len(lev1)):
  9.     levels.append('%i' % lev1[j])
  10. data.setdimvalue(0, lev2)
  11. #Plot
  12. layer = contourf(data, 20)
  13. colorbar(layer)
  14. yticks(lev2, levels)
  15. xlabel('Longitude')
  16. ylabel('Pressure (hPa)')
  17. title('Latitude average uwnd profile')


ave_rect_profile.png

脚本2:
  1. #Read data array
  2. f = addfile('D:/Temp/nc/uwnd.2011.nc')
  3. data = f['uwnd'][0,:,'0:70','50:150']

  4. #Get rotated grid
  5. lat = arange(10, 41, 5)
  6. lon = arange(70, 131, 5)
  7. xn = len(lon)
  8. yn = len(lat)
  9. lon, lat = meshgrid(lon, lat)
  10. angle = 20 * pi / 180
  11. rotate = array([[cos(angle),sin(angle)], [-sin(angle),cos(angle)]])
  12. n = lon.size
  13. xy = zeros([n, 2])
  14. xy[:,0] = lon - 70
  15. xy[:,1] = lat - 10
  16. xy = dot(xy, rotate)    #Matrix multiplication
  17. xy[:,0] = xy[:,0] + 70
  18. xy[:,1] = xy[:,1] + 10
  19. lon[:,:] = xy[:,0]
  20. lat[:,:] = xy[:,1]

  21. #Project data to the grid
  22. ndata = data.project(lon, lat)

  23. #Average data along tilt latitude
  24. londata = mean(ndata, axis=1)
  25. latdata = mean(ndata, axis=2)
  26. lev1 = data.dimvalue(0)
  27. lev2 = meteo.pressure_to_height_std(lev1)
  28. levels = []
  29. for j in range(0, len(lev1)):
  30.     levels.append('%i' % lev1[j])

  31. #Plot
  32. subplot(2,1,1)
  33. layer = contourf(lon[0,:], lev2, londata, 20)
  34. colorbar(layer)
  35. yticks(lev2, levels)
  36. xlabel('Longitude')
  37. ylabel('Pressure (hPa)')
  38. title('Tilt latitude average uwnd profile')

  39. subplot(2,1,2)
  40. layer = contourf(lat[0,:], lev2, latdata, 20)
  41. colorbar(layer)
  42. yticks(lev2, levels)
  43. xlabel('Latitude')
  44. ylabel('Pressure (hPa)')
  45. title('Tilt longitude average uwnd profile')


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

新浪微博达人勋

发表于 2016-1-7 22:08:16 | 显示全部楼层
多谢楼主共享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-5-6 16:43:25 | 显示全部楼层
王老师您好,麻烦我想问一下有没有关于时间剖面(nc数据)的例子,类似于micaps中ec数据的时间剖面图。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-10-12 11:39:55 | 显示全部楼层
王老师您好,我初学MI,我想问一下王老师,就是这种剖面图,我想左侧Y轴显示特定的层次高度,王老师上面的图70 50 10hPa我想在Y轴不显示出来,把100hPa显示出来,我该这么设置啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-4-28 10:45:37 | 显示全部楼层
版上的牛人们啊,请教问题啊。
#Get rotated grid
lat = arange(10, 41, 5)
lon = arange(70, 131, 5)
xn = len(lon)
yn = len(lat)
lon, lat = meshgrid(lon, lat)
angle = 20 * pi / 180
请教两个问题。
王老师给的脚本里面的这几行中,我把arange(70, 131, 5)中的参数改为2,即arange(70, 131, 2)。能出pressure_longitude图,后面的pressure_latitude图出不来,报错,说是下标“溢出”。

第二个问题,angle = 20 * pi / 180。这句话里面的这个20是啥意思啊。

多谢老师们。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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