爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8957|回复: 21

[分享资料] query的方便

[复制链接]

新浪微博达人勋

发表于 2013-4-25 19:13:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 www237036 于 2013-9-11 12:17 编辑

最近发现GrADS里面的query很好用,把最近用的几个记录下来,以便后用。
1)q dims
查询现在的维度环境
处理数据有时候设定时间不是很确定,比如想要挑出逐日资料中,1980-2010每年12月的资料,但是有闰年会影响,set t 可能不太好用,这时候可以
iy=1980
while(iy<=2010)
'set time 0001Dec'%iy''
'q dims'
mt=sublin(result,5)
kt=subwrd(mt,9)
it=kt
while(it<=kt+31)
。。。
用set time 代替set t ,直接定位到每年的12月1日,然后q dims,可以给出现在的维度环境,然后用sublin定位到时间维度行,用subwrd定位到代表当前时次的字符串,赋予kt,稍加处理就可以得到每年12.1-12.31的数据了。

2)q defval
查询某点的某个定义变量的值
有的时候计算某个变量,不想用图表述,而是想用字符串在屏幕上显示出来时,可以用这个
'define cor=tcorr(ppt,nino-nino(t=52),t=1,t=51)'
'q defval cor 1 1'
a=subwrd(result,3)
'set strsiz 0.15'
'draw string 0.5 8.1 corr & nino3.4 spfz = 'a''
定义了相关系数,用q defval 查询位置在(1,1)的相关系数的大小,然后以字符串的形式写到屏幕上去。

3)q w2xy
查询图上某点横竖坐标位置相对应的屏幕位置
'q w2xy 160 30'
x1=subwrd(result,3)
y1=subwrd(result,6)
'q w2xy 180 50'
y2=subwrd(result,6)
'set line 4'
'draw line 'x1' 'y1' 'x1' 'y2''
从(160°E,30°N)到(180°E,50°N)画一条直线。
不仅可以用于地图经纬度与屏幕位置的对应,只要有横纵坐标,就可以将某点的屏幕位置找出来。
反过来也有类似的命令,只要在GrADS里面q一下,就可以看到很多很方便的命令。

4)q file
可以得到很多关于当前文件的信息,这次用到的是关系变量的。比如一个文件中有四个变量,ctl如下
vars  4
cor_sst  40 -999 corr with sst
cor_tmp  40 -999 corr with air tmp
cor_hgt  40 -999 corr with height
cor_ugrd  40 -999 corr with zonal wind speed
endvars

当画每个变量时,为了画的好看,set写了一堆,而所有变量的图设定都是一致的。此时当然可以复制粘贴,改下变量名,但是gs文件会很长。故用q file,达到简便的效果。对应上面的ctl,具体gs如下
'reinit'
'open ***.ctl'
ivar=1
while(ivar<=4)  *共四个变量
'q file'                *得到文件的基本信息,包括x,y,z,t坐标和变量
mt=sublin(result,6+ivar)  *取结果中关于变量的信息行,第一个变量对应第7行,第二个对应8行。。。
str=subwrd(mt,1)            *取变量信息行中第一个单词,即变量的名称
'draw string 1 1 'str''     
'set ****'
'd 'str''                               *画这个变量
'c'
'print'
ivar=ivar+1                      *循环
endwhile

用循环的方式画多个变量,不用复制粘贴代码了。

现在用到的就这么多,以后用到其他的再补充


评分

参与人数 2金钱 +20 贡献 +8 收起 理由
mofangbao + 10 + 3 挺有心
传说中的谁 + 10 + 5

查看全部评分

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

新浪微博达人勋

发表于 2013-4-25 19:16:35 | 显示全部楼层
挺好的,以后用到其他的也可以写下来跟大家分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-25 20:25:20 | 显示全部楼层
楼主应该把常用的几个都弄过来,好好讲讲,这样的技巧是很多人都缺乏的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-25 20:59:11 | 显示全部楼层
为什么第三行的代码还有双引号呢?
楼主可以详细解释一下:
'set time 0001Dec'%it''
'q dims'
的含义吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-25 21:01:24 | 显示全部楼层
这些小技巧还是很有用!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-26 08:52:14 | 显示全部楼层

这个就是针对只取每年12月资料的例子,设定字符串it为1981到2010,然后set time到每年的12月1日,'%it' 就是取出将字符串it所代表的值,在这里,当it=1981时,'set time 0001Dec'%it'' 就是把时间定到1981年12月1日00时,这里不是双引号,而是'%it‘的单引号和'set time ...‘的单引号正好在一起。
在用set time把时间设定到自己想要的某日某时之后,因为不知道它在数据集中到底是第几个时次,所以'q dims' ,这时候就可以查询当前所在的维度环境,包括x,y,z,t等,然后再把查询到的时次赋予某个字符串变量,这样就可以像以前一样 'set t ' 来继续后面的工作了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-26 08:56:27 | 显示全部楼层
没有用过这个功能,按楼主说的试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-26 09:11:03 | 显示全部楼层
kongfeng0824 发表于 2013-4-25 20:59
为什么第三行的代码还有双引号呢?
楼主可以详细解释一下:
'set time 0001Dec'%it''

同问,it是指什么的,加31指什么啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-26 10:03:57 | 显示全部楼层
www237036 发表于 2013-4-26 08:52
这个就是针对只取每年12月资料的例子,设定字符串it为1981到2010,然后set time到每年的12月1日,'%it' 就 ...

这个我要试试。厉害!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-4-26 18:26:50 | 显示全部楼层
刘振 发表于 2013-4-26 09:11
同问,it是指什么的,加31指什么啊

it就是定了个时间变量,可以在循环中变化。+31指定到12月31日,只是针对上面取每年12.1-12.31数据的例子
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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