爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9040|回复: 14

MeteoInfoLab脚本示例:斜剖面(2D、3D显示)

[复制链接]

新浪微博达人勋

发表于 2017-11-19 11:15:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ︶ㄣ安定■丶 于 2017-11-24 13:10 编辑

结果2D图绘制如下(叠加了地形):
TIM截图20171126111832.png

具体脚本如下:
  1. figure(figsize=[1500,400],newfig=False)
  2. fig,((ax1,ax2)) = subplots(1,2,position=[0,0.08,1,0.89])
  3. f = addfile(r'H:\test\data\test.nc')
  4. fn1 = addfile(r'H:\alldata\dixing/elev.0.5-deg.nc')
  5. lev1 = f['level'][:]
  6. lev2 = meteo.pressure_to_height_std(lev1)
  7. lev2 = lev2[::-1]/1000

  8. lon1 = 80
  9. lon2 = 120
  10. lat1 = 32
  11. lat2 = 40
  12. lon = lon1
  13. lat_c = []
  14. tdata = []
  15. tdata_terrain = []
  16. while lon<=lon2:
  17.     lat = lat1+(lat2-lat1)*(lon-lon1)/(lon2-lon1)
  18.     lat_c.append(lat)
  19.     print lat
  20.     tdata.append(f['w'][0,:,'%f'%lat,'%f'%lon])
  21.     tdata_terrain.append(fn1['data']['%f'%lat,'%f'%lon])
  22.     lon = lon+1
  23.    
  24. tdata_terrain=array(tdata_terrain)   
  25. tdata_terrain=tdata_terrain/1000.0
  26. alldata=concatenate(tdata,axis=0)
  27. alldata=reshape(alldata,(len(tdata),len(lev1)))   
  28. alldata=alldata.T
  29. alldata = alldata[::-1,:]

  30. axes(newaxes=False)   
  31. x=arange(lon1,lon2+1,1)
  32. levs = arange(-0.2,0.22,0.02)
  33. yaxis(tickin=False,tickfontsize=17)
  34. xaxis(tickin=False,tickfontsize=17)
  35. yaxis(location='right',tickin=True,tickfontsize=18)
  36. layer = contourf(x,lev2,alldata,levs,cmap='BlRe')
  37. fill_between(x,tdata_terrain,color='gray')
  38. plot(x,tdata_terrain,color='k')
  39. ylabel('Hight(km)',fontsize=18,bold=False)
  40. xlabel('Longitude',fontsize=18)
  41. ylim(lev2.min(),12.001)
  42. colorbar(layer,aspect=25)

  43. caxes(ax2)
  44. axesm(newaxes=False,tickfontsize=17)
  45. lat = [32, 40]
  46. lon = [100, 120]
  47. geoshow(lat, lon, size=2, color='b')
  48. lchina = shaperead('D:/Temp/map/bou2_4p.shp')
  49. geoshow(lchina,edgecolor='k',size=1)
  50. xlim(70,140)
  51. ylim(15,55)
  52. antialias(True)


看到有3D显示斜剖面的需求,感谢王老师及时进行了更新,现在可以将斜剖面显示在3D地图上了。
结果3D图绘制如下(叠加了地形):
TIM截图20171126112122.png

3D显示斜剖面具体脚本如下:
  1. f = addfile(r'H:\test\data\test.nc')
  2. fn1 = addfile(r'H:\alldata\dixing/elev.0.5-deg.nc')
  3. lev1 = f['level'][:]
  4. lev2 = meteo.pressure_to_height_std(lev1)
  5. lev2 = lev2[::-1]/1000

  6. lon1 = 80
  7. lon2 = 120
  8. lat1 = 32
  9. lat2 = 40
  10. lon = lon1
  11. x = []
  12. y = []
  13. tdata = []
  14. tdata_terrain = []
  15. while lon<=lon2:
  16.     lat = lat1+(lat2-lat1)*(lon-lon1)/(lon2-lon1)
  17.     print lon
  18.     tdata.append(f['w'][0,:,'%f'%lat,'%f'%lon])  
  19.     tdata_terrain.append(fn1['data']['%f'%lat,'%f'%lon])
  20.     x.append(lon)
  21.     y.append(lat)
  22.     lon = lon+1
  23.    
  24. tdata_terrain=array(tdata_terrain)   
  25. tdata_terrain[tdata_terrain<0] = 0
  26. tdata_terrain=tdata_terrain/1000.0

  27. alldata=concatenate(tdata,axis=0)
  28. alldata=reshape(alldata,(len(tdata),len(lev1)))   
  29. alldata=alldata.T
  30. alldata = alldata[::-1,:]
  31. x=array(x)
  32. y=array(y)

  33. ax = axes3d(position=[0.11, 0.11, 0.775, 0.815],tickfontsize=17,bbox=False)
  34. levs = arange(-0.2,0.22,0.02)
  35. china = shaperead('D:/Temp/map/china.shp')
  36. world = shaperead('D:/Temp/map/country1.shp')
  37. ax.plot_layer(china,edgecolor='gray')
  38. ax.plot_layer(world,edgecolor='gray')
  39. layer=ax.contourf(x,lev2,alldata,levs,zdir='xy',alpha=0.8,sepoint=[lon1,lat1,lon2,lat2],cmap='BlRe')
  40. k =(lat2-lat1)/float((lon2-lon1))
  41. y1=k*(x-lon1)+lat1
  42. ax.plot(x,y1,tdata_terrain,'-k',linewidth=1)
  43. ax.fill_between(x,tdata_terrain, zdir='xy',color='gray',y=y1)

  44. xlim(70,140)
  45. ylim(15,55)
  46. zlim(0,12)
  47. colorbar(layer,aspect=30)
  48. ylabel('Latitude (degrees)',fontsize=17)
  49. xlabel('Longitude (degrees)',fontsize=17)
  50. zlabel(label='Altitude (km)',fontsize=17)
  51. antialias(True)


评分

参与人数 1威望 +5 金钱 +10 贡献 +8 体力 +50 收起 理由
MeteoInfo + 5 + 10 + 8 + 50 很给力!

查看全部评分

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

新浪微博达人勋

发表于 2017-11-19 11:24:39 | 显示全部楼层
这个比较厉害!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-19 11:44:21 | 显示全部楼层
6666666 能不能把剖面直接加到地图上面啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-11-19 11:56:38 | 显示全部楼层
xyan88 发表于 2017-11-19 11:44
6666666 能不能把剖面直接加到地图上面啊

这个比较简单,你参考这个帖子应该就能加上http://bbs.06climate.com/forum.p ... mp;page=1#pid843774
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-11-19 12:08:31 | 显示全部楼层
︶ㄣ安定■丶 发表于 2017-11-19 11:56
这个比较简单,你参考这个帖子应该就能加上http://bbs.06climate.com/forum.php?mod=viewthread&tid=5690 ...

已经在楼上脚本中更新了,叠加地形
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-11-19 12:22:38 | 显示全部楼层
xyan88 发表于 2017-11-19 11:44
6666666 能不能把剖面直接加到地图上面啊

看错了,你指的3D的斜剖面,暂时还不行
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-19 12:41:19 | 显示全部楼层
安定老师和王老师真是高人,且是热心人。好好学习一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-19 13:19:50 | 显示全部楼层
感谢分享,meteoinfo用法和脚本示例越来越丰富了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-11-24 13:01:34 | 显示全部楼层
xyan88 发表于 2017-11-19 11:44
6666666 能不能把剖面直接加到地图上面啊

已经在楼顶加了3D显示斜剖面的功能,请参考
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-24 13:05:29 | 显示全部楼层
安老师,腻害哦!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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