爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 59857|回复: 139

[分享资料] GrADS绘制站点分布图-升级版

  [复制链接]

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-10-30 22:59:19 | 显示全部楼层 |阅读模式

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

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

x
    经常看到有同学问绘制站点分布图的各种问题,我想很多人都有自己的绘制方法,比如用MeteoInfo就能非常方便的进行绘制。    除了其他工具,GrADS也是可以绘制出质量不错的图形的,GrADS绘制站点图的思路基本都是一致的,最基础的就是直接d出来,但是这样不能设置点的样式,用的更多的是我很久之前转帖(点击查看)中那样类似的思路:获取站点经纬度,然后绘制,不过如果需要根据数据值的大小来分别设置绘制点的样式,甚至颜色大小呢,比如下面这样的图:

(由于数据是别人要发论文的,因此我在绘图时对结果做了处理,图像也很乱,只是说明绘制方法)
station.png
绘制思路:
利用站点格式的数据,设置输出到屏幕,将N个站点数据保存在变量中,然后对数据进行循环,逐行取数据的经纬度以及数据值,根据数据值判断应该绘制什么样的点,最后绘制图例。
注:本脚本参考了一位“未知师姐”的绘制程序,我对数据处理做了优化,原来的程序需要额外提供一个txt的文本,现在直接从站点文件取数据。

绘制脚本:
  1. 'reinit'
  2. 'open d:\test.ctl'
  3. 'set lon 70 140'
  4. 'set lat 15 55'
  5. 'set mpdset cnbase'
  6. 'set map 1 1 5.0'
  7. 'set grads off'
  8. 'set grid off'
  9. 'set xlopts 1 4 0.15'
  10. 'set ylopts 1 4 0.15'
  11. 'set xlint 10'
  12. 'set ylint 10'
  13. 'draw map'
  14. 'river'
  15. 'd maskout(r,r-30)'
  16. 'set gxout print'
  17. 'd b'
  18. res = result
  19. siz.1=0.12
  20. siz.2=0.09
  21. siz.3=0.06
  22. siz.4=0.06
  23. siz.5=0.09
  24. siz.6=0.12
  25. siz.7=0.15
  26. i=2
  27. while(1)
  28.     ln=sublin(res,i)
  29.     if(ln='');break;endif
  30.     i=i+1
  31.     lat1=subwrd(ln,3)
  32.     lon1=subwrd(ln,2)
  33.     data=sublin(res,i)
  34.     i=i+1
  35. 'q w2xy 'lon1' 'lat1''
  36. x1=subwrd(result,3)
  37. y1=subwrd(result,6)
  38. data=subwrd(data,1)*1
  39. 'set line 6'
  40. if(data<-5)
  41.     'draw mark 5 'x1' 'y1' 'siz.4''
  42. endif

  43. if(data>=-5 & data<-3)
  44.     'draw mark 2 'x1' 'y1' 'siz.5''
  45. endif
  46. 'set line 1'
  47. if(data>=-3 & data<0)
  48.     'draw mark 6 'x1' 'y1' 'siz.7''
  49. endif

  50. if(data>=0 & data<3)
  51.     'draw mark 1 'x1' 'y1' 'siz.6''
  52. endif
  53. 'set line 9'
  54. if(data>=3 & data<5)
  55.     'draw mark 6 'x1' 'y1' 'siz.3''
  56. endif

  57. if(data>=5 & data<8)
  58.     'draw mark 2 'x1' 'y1' 'siz.1''
  59. endif

  60. if(data>=8)
  61.     'draw mark 5 'x1' 'y1' 'siz.2''
  62. endif
  63. endwhile
  64. 'set line 1'
  65. 'set string 1 l 5 0'
  66. 'set strsiz 0.2 0.2'
  67. 'set font 1'
  68. 'draw string 1.0 7.0 (1)'
  69. 'set font 0'
  70. 'set string 1 l 5 0'
  71. 'set strsiz 0.12 0.15'

  72. 'draw string 1.3 3.0  <-5'
  73. 'draw string 1.3 2.7  -5~-3'
  74. 'draw string 1.3 2.4  -3~0'
  75. 'draw string 1.3 2.1  0~3'
  76. 'draw string 1.3 1.8  3~5'
  77. 'draw string 1.3 1.5  5~8'
  78. 'draw string 1.3 1.2  >8'

  79. 'set line 6'
  80. 'draw mark 5 1 3.0 'siz.1''
  81. 'draw mark 2 1 2.7 'siz.2''
  82. 'set line 1'
  83. 'draw mark 6 1 2.4 'siz.3''

  84. 'draw mark 1 1 2.1 'siz.4''
  85. 'set line 9'
  86. 'draw mark 6 1 1.8 'siz.5''
  87. 'draw mark 2 1 1.5 'siz.6''
  88. 'draw mark 5 1 1.2 'siz.7''

  89. 'southsea'
  90. 'enable print D:\test.gmf'
  91. 'print'
  92. 'disable print'
  93. ;

绘制代码如下:

评分

参与人数 3金钱 +32 贡献 +6 收起 理由
meehooqq + 2 很给力!
river + 20 + 2 赞一个!
lqouc + 10 + 4

查看全部评分

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

新浪微博达人勋

发表于 2013-10-30 23:08:14 | 显示全部楼层
抢楼{:5_235:}
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

发表于 2013-10-31 06:06:22 | 显示全部楼层
抢到地板也不错,支持!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-31 08:05:27 | 显示全部楼层
虽然这种图我一般都用meteoinfo了,但是还是喜欢可以自己编写脚本的,用着放心啊。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-31 08:17:15 | 显示全部楼层
3floor~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-31 08:43:32 | 显示全部楼层
又可以学习新方法了,赞一个!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-31 09:16:48 | 显示全部楼层
前几天还在求呢~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-31 09:17:51 | 显示全部楼层
前几天还在求呢~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-31 09:58:31 | 显示全部楼层
我觉得这种手动设置分段比较麻烦
换一个数据又得重新改很多
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
 楼主| 发表于 2013-10-31 11:18:57 | 显示全部楼层

分段当然是根据自己的需求来设置的,GrADS做这个本来就不是最方便的,只是介绍下思路而已,具体用什么实现每个人都有自己的选择~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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