GrADS站点文件作图详细解决方案
GrADS实用绘图--基本操作

• 关闭数据文件
ga-> close 3 ↵ ga-> close 2 ↵ ga-> close 1 ↵
文件打开从1 开始依次编号, 文件关闭时先 关闭序号最大 的文件
26
LASG动力论坛版
三. 运行GrADS绘图软件包
• 设置维数环境
ga-> set x 1 73 ↵ ga-> set lat -20 60 ↵ ga-> set lev 850 ↵ ga-> set time 00z01Apr2007 ↵
♥♥♥
18
LASG动力论坛版
二. GrADS绘图软件包的安装
• Windows下的安装(2)
– 设置环境变量 ♥♥♥ “我的电脑”右键菜单 属性 高级 环境变量
• 新建变量 GASDIR c:\PcGrADS\dat GASCRP c:\PcGrADS\lib GAUDFT c:\PcGrADS\udft\udft.list • 修改PATH变量, 增加路径 c:\PcGrADS\win32;c:\PcGrADS\lib;c:\PcGrADS\dat;
8
LASG动力论坛版
一. 引
• GrADS实用文档
言
– LASG编 《GrADS实用手册》 ♥♥♥ 中文, 较全面, 可用来自学 – GrADS reference card 英文, 绘图命令和函数速查 – GrADS scripting language reference card 英文, 脚本语言语法速查 – GrADS Documentation Index 联机英文索引, 最全面
12
LASG动力论坛版
二. GrADS绘图软件包的安装
• 操作系统
基于GRADS和GIS的离散站点绘图技术研究与实现

批 处理 操作 。该 软件 具有 操作 简单 、 能强 大 、 功 显示 快 速 、 图类 型 多样 化 、 出 图形 美 观 等 特 点 , 同时 兼 具
有 多种 地 图投影 坐标 系统 , 经成 为 国 内外 气 象 数 已
气 象离 散站 点二 进制 文 本 数据 一 般 包 括 “ 号 站 经度 纬度 要 素” 内容 , 等 格式 如下 :
5 08 1 3. 5 3 73 2 7 3 1 4 4. 4 57 81 1 3. 5 3 7 3 0 1 5 3. 3 4
有 机结 合起 来 , 构建 离散 站 点 的绘 图 系统 , 为公 众气 象 服务 、 策气 象服 务提 供更 有针 对性 的产 品 , 决 可有 力 地支 撑气 象 防灾减 灾业 务 。
收 稿 日期 :0 1—1 21 2—1 ; 订 日期 :0 2— 3— 3 9修 2 1 0 2
将文 本按 照如 下数 据格 式读取 并 写入二 进制 文
作 者 简 介 : 学 峰 (9 9 , , 东 菏 泽 人 , 程 师 , 士 , 要 从 事 台 风 降 水 预 报 技术 研 究 . — i: sx@16 tm 范 17 -) 男 山 工 学 主 Ema l tf 2 .o la f
1 研 究 思 路
研究 开发 该 系统 遵 循 设计 模 块 化 、 程序 维 护 简
单、 用户使 用方 便 等原 则 。研 究开 发 时根据 G A S RD 、 G S的 自身 功能 , 托 c +B i e 编 程工 具 将 两 者 I 依 + ul r d 有机 结合 起来 。具 体思 路如 下 :
范 学峰 ,席世 平
GrADS实用绘图--站点图 函数使用

存放在 系统变量 result中
16
六. set gxout其它选项(D)2—print / fwrite
输出格式
set prnopts format(%g) line_n(8) blank_n(1) { |u}
LASG动力论坛版
数据写屏输出 set gxout print binary数据输出 set gxout fwrite
• 注意点
♥♥♥
– 为避免插值出现虚假结果, 参考网格的间隔与站点 间距相近为好; – 具体情况具体分析, 并不一定Cressman函数更好!
12
LASG动力论坛版
六. 图形显示(D)2
• 变量定义技巧
— 站点绘图扩展
♥♥♥
– define命令只适用于格点数据; – 在当前缺省文件为格点数据时, 可以用define 命令将站点数填色(马赛克图) stat 按set fgvals指定值填网格颜色 print 网格填值 fwrite
findstn 寻找最近的站点 model 站点填图 stnmark 标记站点位置 value 标站点值
tserbarb 单站的风羽时间序列 tserwx 单站天气现象时间序列 wxsym 在站点上标记天气符号(set wxopt)
天气符号颜色
set wxcols #c1 #c2 …
字符大小
set digsize #inch
粗 细
set cthick #thick
颜 色
set ccolor #color
u,v,t,d,slp,Δp: 风,温度,露点,地面气压,变压 cloud: [1~9] 标记的类型, [20~25]云量: 20晴, 21少云, 22中云, 23多云, 24阴; 25缺测(M)
GrADS画图入门

命令:query dims
ga-> q dims Default file number is: 1 X is varying Lon = 100 to 150 X = 1 to 101 Y is varying Lat = 0 to 40 Y = 1 to 81 Z is fixed Lev = 1000 Z = 1 T is fixed Time = 00Z19JUL2005 T = 1
• 3、图形显示类型及绘图设置:
(1)一维:直方、折现、散点、误差图....(excel 2003) (2)二维:标量场——等值线、阴影图 矢量场——风矢量、流线图 站点—— (3) draw line/string/title/mark……
标量场分析
1. 等值线
2. 阴影图 1. 等值线
设置 set gxout contour
Outline
• 1、grads功能概述(不讲) • 2、Grads数据准备:
(1)ncep资料的直接读取 (2)mm5out_to_Grads,wrfoutput_to_grads (3)二进制格点数据dat的生成和数据描述文件ctl作用 (4)站点数据的准备以及站点图形的绘制
• 3、图形显示类型及绘图设置:
ga-> q files File 1 : TC0801-StrkPro024 2008041714 Descriptor: strike024_041714.ctl Binary: strike024_041714.dat File 2 : TC0801-StrkPro024 2008041720 Descriptor: strike024_041720.ctl Binary: strike024_041720.dat
GrADS绘图学习技巧与实例

以下技巧总结都是笔者从学习实践过程中总结出来的,基本的问题。
不求全面,希望对读者学习有用,如果有问题,敬请留言指正,以促进交流学习!1、软件综述:grads软件是一款绘图软件除了绘制图形,还可以提取数据,主要应用是在大气科学中,当然只要是数据处理成grads能够读取的数据文件就可以进行相关绘图。
软件版本问题,软件本身不是很大,我接触到1.8、1.9、2.0版本的,1.8版本的安装很多情况还要修改环境变量、1.9版本的不识别‘sdfopen’命令,最稳定的版本是2.0版本,所以笔者推荐学习者安装2.0版本,选择默认安装路径就可以。
2、文件类型简述:grads处理的是网格数据,可以处理的数据类型有:grd、grib、nc(海洋常用的数据),cdf(雷达卫星数据),其中nc、cdf数据都是自带描述文件,不需要ctl,grib数据要通过命令生成ctl、index数据才可以调用,常用的是grd数据,需要ctl。
3、数据文件转换:grads软件识别的数据是二进制无格式数据,文件类型是‘binary’,写入和生成时是不需要格式的如read(20) sst(i,j,iz,it),20为文件号,通常是十进制数据与grd数据间转换,这里给一个grd转换成txt数据的fortran程序:parameter(nx=56,ny=41,nz=1,nt=360)dimension sst(nx,ny,nz,nt)real sstopen(15,file='sst.grd',form='binary') !固定的用form=‘binary’就是二进制数据open(16,file='sst.txt') !新建txt文件do it=1,ntdo iz=1,nzread(15) ((sst(i,j,iz,it),i=1,nx),j=1,ny) !read后只有文件号,数据是无格式的enddoenddodo it=1,ntdo iz=1,nzwrite(16,*) ((sst(i,j,iz,it),i=1,nx),j=1,ny) !输出时是txt文件可直接看的数据,有格式输出,有*enddoenddoclose(15)close(16)end写程序时:注意格点数要与数据对应,如:上程序对应的数据是经度90~200,纬度-20~60,时间:1971.01~2000.12共360个月的海面温度数据,数据格点精度2*2 ,nx=(200-90)/2+1,ny=(60-(-20))/2+1,nt=360,nz=1,大气的数据要根据数据的层次确定几层。
第二讲GrADS绘图的各种设置

draw xlab string draw ylab string 分别在水平坐标轴或垂直坐标轴左侧写字符串
string,作为x轴或y轴的说明。
set annot color <thickness> 设置上述图注所用的颜色和线宽,缺省为白色,
线宽为6,该命令同时设置了坐标轴线以及刻 度的颜色和线宽,坐标刻度和标尺的线宽为图 注设置的线宽再减1。
例:draw title Geopotential Hight (October 2010)
set xyrev on 交换水平和垂oj 设置当前地图投影方式。
常用proj取值包括: latlon:缺省设置,用固定的投影角进行Lat/lon投影
; scaled:用不固定的投影角进行latlon投影,地图比例
失效; nps | sps:北半球|南半球极地投影; robinson:robinson投影,x:-180 180;y:-90 90 off:不画出地图,坐标轴也不代表lat/lon。
(缺省时即按数据描述文件的维数进行绘图。)
特别地, 当数据文件为全球多层次多时次资料时,例如全球
144*73*12的多时次资料,缺省时维数为x、y方向为 (0-360E,90S-90N),z方向和t为第一个点。
GrADS最擅长画2-D图,即全球数据的缺省维数。
维数说明分为两类:
set lon | lat | lev | time val1 <val2> set x | y | z | t val1 <val2> 两者对应于同一组数据,前者是地球坐标
set grid on|off|value|horizontal|vertical <style> <color>
GrADS绘图软件使用手册

GrADS绘图软件实用手册2002年1月目录第一章 GrADS绘图软件概述1.GrADS绘图软件简介2.Internet上的GrADS资源2.1GrADS在Internet上的主页2.2 windows环境下GrADS资源3.GrADS绘图软件的安装(windows环境)3.1在windows环境下安装GrADS软件包3.2X server 的安装第二章 GrADS绘图模板1.GrADS示例演示1.1 启动GrADS1.2 退出GrADS1.3 示例演示GrADS命令的使用2.GrADS绘图模板3.GrADS模板的高级应用3.1GrADS描述语言3.2GrADS高级模板的应用第三章 GrADS数据格式1.格点数据描述文件1.1 数据描述文件各项解释1.2 生成model.le.dat和model.le.ctl文件的程序代码片段2.站点数据的格式附录1.如何精确控制图形输出的尺寸—Landscape纸型2.台站资料的显示3.Linux环境下的安装第一章 GrADS绘图软件概述1GrADS绘图软件简介The Grid Analysis and Display System(GrADS) 是一套应用广泛、使用方便的科学数据绘图软件包。
其主要特点:z GrADS属于自由软件,可以从Internet上免费获得。
z可运行于各种Windows 和Unix工作平台。
z GrADS可用于4D数据的分析。
既经度、纬度、层(气压层、高度层等)和时间/xyzt 4维。
数据可以是格点化的数据或离散点数据。
GrADS特别适用于气象类数据的分析。
但也完全可以用于更广泛类型的数据分析。
z GrADS有多种显示方式:等值线、流线、矢量图、风矢量图、站点填图、折线图、直方图等多种两维图形。
z可处理多种数据格式的数据。
GRIB、NetCDF、HDF-SDS等通用数据格式和系统自定义的一种二进制数据格式。
z采用命令行输入的方式交互式地显示图形。
GrADS实用绘图(基5)

LASG动力论坛版
8
res = functionname(args) ;
* res为函数值
math_abs(expr), math_log(expr), math_log10(expr) math_sin(radian), math_cos(radian), math_tan(radian) math_asin(expr), math_acos(expr), math_atan(expr) math_sinh(radian), math_cosh(radian), math_tanh(radian) math_asinh(expr), math_acosh(expr), math_atanh(expr) math_pow(expr, exponent) math_sqrt(expr), math_exp(exexpr) math_fmod(expr1,expr2), math_mod(expr) math_strlen(string) strlen(string) valnum(string) wrdpos(string,int) sublin(string,n) Subwrd(string,n) substr(string,start,length)
res = write(filename, record, { | append } ) res: 状态值 =0 OK =1 打开错误 =8 文件为read打开 res = close(filename) res: 状态值 =0 OK =1 文件未打开
LASG动力论坛版
11
八. 批处理和脚本语言(S) —控制语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fortran+GrADS站点作图详解mofangbao@气象家园帖子导读:以前论坛也有过相关的帖子,但是到目前为止,仍然不断的有朋友看了那些帖子之后还是不知道如何下手,于是我打算为纯粹的新手写一份说明,这份文档会非常详细,因此适合刚接触GrADS的朋友来参考。
帖子介绍了fortran文件中读写数据的基本知识,grads的站点文件的存放格式,如何通过fortran来写出这个格式的文件,如何建立站点文件的CTL文件,如何为站点数据生成映射文件,站点映射文件的作用,如何通过站点CTL文件来预览站点数据,如何用fortran生成grads支持的格点文件,如何给格点配置CTL文件,如何编写GS文件来进行插值,如何绘制等值线以及阴影图,如何屏蔽区域外的图形等内容。
如果你对以上问题存在疑惑,希望这个帖子能够对你有所帮助,因此,看完这份文档之后,您应该可以做到这些:(会的就跳过吧,我也是犹豫了很久要不要写的,算是新手礼包的一部分吧)开始之前,先了解站点数据的基本内容一般情况下,我们看到的站点数据是这样的:50353 126.39 51.43 100 8950632 121.55 48.46 100 5450527 119.45 49.13 100 2950434 121.41 50.29 100 4650557 125.14 49.10 100 8350745 123.55 47.23 100 8050756 126.58 47.26 100 7450788 131.59 47.14 100 3650873 130.17 46.49 100 3150978 130.57 45.17 100 59第一列为站号,第二、三列为经纬度,第四、五列为其他数据。
当然,也可能是把经纬度单独存放,然后数据单独存放,比如气候中心免费开放的160站的月平均温度降水值。
如果是micaps资料可以查看micaps用户手册。
这个例子中使用的就是micaps的第三类数据格式,示例文件可以从这里下载:(资料下载)除了了解这些,还必须了解该数据的缺测值用什么来表示,这个在后面的数据描述文件中要用到。
1、在fortran中读入这些资料在使用fortran之前,请确保你已经安装了fortran编译器,如果你是xp系统,建议安装CFV6,如果是win7系统,那么可以安装microsoft fortran powerstation4.0(以下简称4.0),这两个软件在气象资料站均有下载,安装完成后,请在你磁盘的某个文件夹下面新建一个文件夹用于本次作图,如果使用的是CVF6,该文件夹的路径中不要包含中文名。
新建文件夹完成后,从开始菜单打开fortran编程窗口,然后点击file->new,新建一个free format的自由格式fortran文件,4.0的直接建立一个TextFile即可:CVF中新建fortran文件4.0中新建TextFile即可注意:CVF中先选路径和文件名,然后会建立该文件,4.0中直接建立一个临时文件,当你按保存按钮时才会提示你选择保存的路径,如果你之前用4.0的fortran 编译过其他文件,那么请先关闭工作区再新建,从file->close workspace可以关闭。
当然也可以直接建立一个文本文件,然后重命名为sta2grd.f90,记住,要修改后缀为.f90,表示该文件为自由格式的fortran源文件。
现在就可以开始着手读取数据了。
(1)先把fortran的开头和结尾写了,并且用implicit none声明不能使用未定义的变量,同时添加一个注释,自由格式中可以用一个英文的!来表示该行该符号往后均为注释内容,不参与编译:Program sta2grdImplicit none!这里是程序的变量声明!变量声明结束!程序开始!程序结束End(2)定义几个变量Fortran中常用的变量类型有整型:integer,单精度实型real,双精度实型double,字符型character,关于fortran变量的更多内容请参考彭国伦的fortran95程序设计。
通过观察我们要读取的文件:diamond 3 2011年05月降水量值0 0 0 0 0 0 1 0 0 1 100050353 126.39 51.43 100 8950632 121.55 48.46 100 54…第一行和第二行对我们转换没有什么作用,因此我们只需要定义必须要用到的变量,站号stid,类型为字符型,长度为8,其余的经度lon、纬度lat,一个无意义的变量(列中的100)var和降水数据rain,均为实型,原因在下面的GrADS中的存放方式有说明。
Character*8 stidReal lon,lat,var, rain(3)打开数据文件并读入数据Fortran中使用open语句来实现打开文件,同时指定一个打开的文件号和文件路径,以及其他一些指定参数,下面的语句即可打开这次示例的文件:Open(1,file=’raindata.txt’,status=’old’)这里的1是一个文件号,是读写时需要用到的,file后的是文件名,直接写文件名表示在和程序同一个文件夹,status表示当前文件的状态,old表示该文件已经存在,这样就能避免通过write语句误写入数据覆盖了数据文件。
(4)开始读入数据到变量中在fortran中使用read语句来读入数据,每读取一行文件的指针就会自动向下移动一行(关于文件指针指向这一行你可以想象成该行被选中,要从该行读取数据了)比如read(1,*)var,就表示从打开的1号文件中按默认格式读取数据到var中。
我们先跳过两行“没用”的数据:Read(1,*)Read(1,*)这样后面不接任何变量就表示把这两行跳过去了,现在文件指针在第三行的开头了,也就是我们需要的数据了,来读一行:Read(1,*)stid,lon,lat,var,rainFortran 会自动把这五个数值分别给后面的五个变量了,现在文件的指针已经在第四行的开头了,我们需要继续读取数据,当然不能够又写一行,应该继续使用上面这一行来读取,可以通过goto语句实现,goto语句的含义是让程序跳转到指定的标号执行,这里就应该是去刚才的那个语句执行,所以在刚才的Read(1,*)stid,lon,lat,var,rain 前面加上一个标号10,然后在下面写上一句goto 10,如下所示:10 Read(1,*)stid,lon,lat,var,rainGoto 10这样,程序就会不断的往下读取了,但是,文件的行数是有限的,这样做一旦到文件结束,fortran就会报出运行时错误,通常是end-of-file…的错误,这时候可以通过END标签来避免这种情况的出现。
End标签能够让read语句读取到文件末尾的时候自动跳转到指定的标号去执行,再次修改这个读取的语句:10 Read(1,*,end=100)stid,lon,lat,var,rainGoto 10100 contine这样,当文件读取结束时,就会到100 continue来执行了,continue的意思就是接着按顺序往下执行,本身没有什么含义。
我们现在只是读取数据,没有对数据进行任何输出和处理,读取完毕后应该及时关闭这个文件,使用close方法即可。
在100 continue的下面加上close(1),1同样是open里的那个文件号。
这段程序就完成了这个示例文件的读取,每读取一次,上面几个变量的值就会被刷新一次,如果需要验证读取是否正确,可以在标号为10的read语句和goto 10之前加上一个输出到屏幕的命令,然后用pause命令暂停执行,以便检查:10 Read(1,*,end=100)stid,lon,lat,var,rainPrint*,stid,lon,lat,var,rainpauseGoto 10现在,这段程序应该是这样子的:Program sta2grdImplicit none!这里是程序的变量声明Character*8 stidReal lon,lat,var, rain!变量声明结束!程序开始Open(1,file=’raindata.txt’,status=’old’)read(1,*)read(1,*)10 Read(1,*,end=100)stid,lon,lat,var,rainPrint*,stid,lon,lat,var,rainpauseGoto 10100 continueClose(1)!程序结束End这时候就可以编译运行一下了,4.0中点击窗口中左上角的build按钮(shift+f8),弹出的对话框中选择是,然后下面的消息窗口会提示:sta2grd.exe - 0 error(s), 0 warning(s),表示编译通过了,可以开始执行了,选择build菜单的Execute sta2grd.exe,就可以开始执行了;CVF中直接点击红色的感叹号左侧有两个朝下箭头的按钮编译,无错后点击红色感叹号可以执行,每行输出后都会暂停,等按下回车后会继续读取下一行并暂停,经过对比,发现读取成功,然后删除用于测试的print*和pause语句:4.0中的编译2、按照GrADS的规定将数据进行输出接下来所增加的语句都在10号语句和goto 10语句之间,因为这时候几个变量的值是刚刚从文件中读出来,所以要及时把他们写出去。
在输出为GrADS可用格式之前,必须先了解GrADS中的站点数据是如何存放的,只有知道GrADS中规定的存放格式,才能够明白输出时该如何写。
GrADS中的站点数据也是二进制格式,并且按照时间来分组,(本例子中仅有一个时次,多时次的相信你看完后也会写出来了),每个时次下面包括了N个站该时次的数据,每个站的信息由一个表示该站的文件头信息以及数据值组成,每个时次结束后写入一个特殊的标记表示这个时次结束,文件头信息结构如下:struct reportheader {char id[8]; /* 站号 */float lat; /* 纬度*/float lon; /* 经度 */float t; /* 相对于该时次的相对单位值 */int nlev; /* 总层次 */int flag; /* 表示有无高空资料 */};上面的定义是C语言中的定义,转换到fortran中就是我们开始定义的几个变量,但是还没有定义t(避免和总时次混淆,定义为tim)、nlev和flag,所以先去上面的定义变量的地方补上这上个变量,把real那一行改为:real lon,lat,var, rain,tim ,在real行下面增加一行:integer nlev,flag。