爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8790|回复: 10

MeteoInfoLab脚本示例:多色线条

[复制链接]

新浪微博达人勋

发表于 2016-5-30 17:04:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2018-6-27 17:55 编辑

对于线对象的绘制每条线只能是固定的颜色,要实现用不同的颜色绘制一条线需要将该线分隔为多条线来绘制。这里示例读取HYSPLIT输出的气团轨迹数据,生成轨迹图层,在生成轨迹图层的时候每两个节点就生成一条线,并将轨迹节点的高度作为属性加入图层中。利用轨迹高度数据形成色标来显示轨迹,达到一条轨迹不同高度用不同颜色显示的目的。

脚本程序:
  1. #Read trajectory data file
  2. fn = 'E:/Trajectory/RYO-to Yaqiang/05060306'
  3. f = open(fn)
  4. line = f.readline()
  5. mfn = int(line.split()[0])
  6. for i in range(mfn):
  7.     f.readline()
  8. line = f.readline()
  9. sn = int(line.split()[0])
  10. for i in range(sn):
  11.     f.readline()
  12. f.readline()
  13. lons = []
  14. lats = []
  15. alts = []
  16. for line in f:
  17.     dd = line.split()
  18.     lat = float(dd[9])
  19.     lon = float(dd[10])
  20.     alt = float(dd[11])
  21.     lats.append(lat)
  22.     lons.append(lon)
  23.     alts.append(alt)
  24. alts = array(alts)
  25. f.close()
  26. #Create trajectory layer
  27. layer = MILayer(shapetype='line')
  28. layer.addfield('Height', 'float')
  29. lon1 = lons[0]
  30. lat1 = lats[0]
  31. for j in range(1, len(lons)):
  32.     lon = lons[j]
  33.     lat = lats[j]
  34.     alt = alts[j]
  35.     layer.addshape([lon1,lon], [lat1, lat], [alt])
  36.     lon1 = lon
  37.     lat1 = lat
  38. levs = arange(0, 1000, 100)
  39. cols = makecolors(len(levs) + 1)
  40. ls = makesymbolspec('line', levels=levs, colors=cols, field='Height', size=2)
  41. #Plot
  42. axesm()
  43. geoshow('country', edgecolor=(204,204,204), facecolor=(250,235,252))
  44. geoshow(layer, symbolspec=ls)
  45. scatterm(lons[0], lats[0], size=8, facecolor='r')
  46. text(lons[0], lats[0]-1, 'Fukushima')
  47. colorbar(layer)
  48. title('Multi-color line')
  49. yticks(arange(30, 51, 5))
  50. xlim(130, 160)
  51. ylim(30, 50)


MeteoInfoLab有专门的函数读取HYSPLIT输出的轨迹文件并生成轨迹图层,脚本也可以写成这样:
  1. #Read trajectory data file
  2. fn = 'D:/Temp/HYSPLIT/05060306'
  3. f = addfile_hytraj(fn)
  4. layer = f.trajlayer()
  5. stlayer = f.trajsplayer()
  6. spoint = stlayer.shapes()[0].getPoint()
  7. slon = spoint.X
  8. slat = spoint.Y
  9. levs = arange(0, 1000, 100)
  10. cols = makecolors(len(levs) + 1)
  11. ls = makesymbolspec('line', levels=levs, colors=cols, field='Geometry_Z', size=2)

  12. #Plot
  13. axesm()
  14. geoshow('country', edgecolor=(204,204,204), facecolor=(250,235,252))
  15. geoshow(layer, symbolspec=ls)
  16. ss = makesymbolspec('point', {'marker':'S','size':12})
  17. geoshow(stlayer, symbolspec=ss)
  18. text(slon, slat-1, 'Fukushima')
  19. colorbar(layer)
  20. title('Multi-color line (Geometry_Z field)')
  21. yticks(arange(30, 51, 5))
  22. xlim(130, 160)
  23. ylim(30, 50)


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

新浪微博达人勋

发表于 2018-6-23 16:34:40 | 显示全部楼层
诶...突然发现也可以在map里直接画...
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2016-6-1 08:39:11 | 显示全部楼层
好漂亮  感谢老师
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-11-4 20:39:15 | 显示全部楼层
老师,请问hysplit输出的气团轨迹数据是在setup run里那个输出的tdmp文件么,是用text打开么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-11-4 23:40:17 | 显示全部楼层
breathfreelylh 发表于 2016-11-4 20:39
老师,请问hysplit输出的气团轨迹数据是在setup run里那个输出的tdmp文件么,是用text打开么

你会画了么同求
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-5 11:06:40 | 显示全部楼层
认真学习,感谢分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-18 11:47:58 | 显示全部楼层
王老师您好 这个代码要用的话 需要修改哪些地方啊?谢谢王老师~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-23 15:33:54 | 显示全部楼层
  File "<iostream>", line 32
    lon = lons<i>
               
SyntaxError: no viable alternative at input '\n'
出现了这个错误...
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-23 15:51:14 | 显示全部楼层
lyysms 发表于 2018-6-23 15:33
File "", line 32
    lon = lons
               

<> 改为 [] ,这是论坛贴代码的bug.
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-23 16:23:02 | 显示全部楼层
谢谢老师回复,但是改完后又出现了这个问题
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'MILayer' is not defined
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-23 16:29:15 | 显示全部楼层
Traceback (most recent call last):
  File "<iostream>", line 27, in <module>
NameError: name 'MILayer' is not defined
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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