☰
GrADS气象绘图入门:安装、ctl数据描述与脚本批量出图
2026/10/18 2:06:53 网站建设 项目流程

简介:这份资源是面向气象、环境及科研数据分析初学者的GrADS绘图软件入门文档,帮助零基础用户完成软件安装并掌握基本绘图命令。GrADS作为自由软件,支持Windows与Unix平台,可处理经纬度、层次、时间构成的4D格点或离散数据,兼容GRIB、NetCDF、HDF-SDS及自定义二进制格式,适合气象类数据的可视化分析。资源包内仅含1个doc文件,大小约1.36MB,内容涵盖软件概述、Windows环境安装步骤、绘图模板与常用命令演示,并附有Model.ctl等示例数据说明。文档从启动退出、命令行交互到等值线、流线、矢量图、站点填图等二维图形输出均有涉及,还介绍了ps、png、jpg、gif等图形格式存储及gv等辅助工具。目前已有127人学习,适合需要快速上手GrADS并生成专业气象图形的读者参考。

1. GrADS 绘图软件安装及入门:从零把气象场画出来

如果你手头有一批站点观测或模式输出的格点数据,想快速画一张等值线图、风场图或垂直剖面图,又不想写几百行 Python 绘图代码,GrADS 往往是那个被低估的老工具。它诞生于气象领域,脚本语法简单,出图快,尤其适合批量出图和快速查看数据。但它的安装和入门确实有点“玄学”——不同系统、不同版本、不同数据格式,踩坑姿势五花八门。这篇笔记面向的是刚接触 GrADS 的从业者,或者被 Python 绘图折磨到想换条路的人。我会从安装讲起,把数据描述文件、基础绘图命令、脚本入门和常见报错串成一条能复现的路径。你不需要气象背景,只要有一份二进制或 NetCDF 数据,就能跟着走一遍。

2. 安装 GrADS:选对版本比装得上更重要

GrADS 的安装本身不复杂,但版本选择直接决定后面能不能顺利读数据。目前常见的有两个分支:经典版 GrADS 2.0.2 和 OpenGrADS 2.1+。经典版稳定但功能老,OpenGrADS 对 NetCDF、GRIB2 支持更好,还带了一些扩展函数。我一般推荐 OpenGrADS 2.1 以上版本,除非你维护的老脚本依赖特定旧行为。

2.1 Linux 下用包管理器还是源码编译

在 Linux 上,最省事的是用系统包管理器。以 Debian/Ubuntu 系为例:

# 更新软件源并安装 OpenGrADS sudo apt update sudo apt install grads # 验证版本 grads -v

如果源里的版本太老,或者你需要特定扩展,可以下载预编译二进制包。常见做法是去 OpenGrADS 的发布页找对应系统的压缩包,解压后把bin目录加入 PATH。注意不要混用经典版和 OpenGrADS 的环境变量,否则会出现库冲突。

# 假设解压到 /opt/opengrads export PATH=/opt/opengrads/bin:$PATH export GADDIR=/opt/opengrads/data export GASCRP=/opt/opengrads/scripts

GADDIR指向字体和地图数据,GASCRP指向脚本库。这两个变量不设,GrADS 启动后画地图会报“无法打开地图文件”。

2.2 Windows 下的安装与路径陷阱

Windows 用户通常下载 OpenGrADS 的 exe 安装包。安装时注意两点:一是路径不要带中文和空格,二是安装完成后需要手动设置环境变量。很多新手装完双击图标能打开,但一画图就提示找不到data目录,就是因为GADDIR没设。

在“系统属性 → 环境变量”里新建:

  • GADDIR=C:\OpenGrADS\Contents\Resources\SupportData
  • GASCRP=C:\OpenGrADS\Contents\Resources\Scripts
  • 在Path里追加C:\OpenGrADS\Contents\Cygwin\Versions\2.1.a2\i686\

具体路径以你实际安装目录为准。设置完重新打开命令行,输入grads -v能看到版本号即成功。

2.3 验证安装:画一张默认地图

安装后别急着读数据,先用内置命令确认环境正常。启动 GrADS:

grads

进入交互界面后,输入:

open set lon 0 360 set lat -90 90 draw map

如果弹出一个窗口显示世界地图,说明安装和图形环境没问题。如果报Cannot open map file,回头检查GADDIR。如果窗口一闪而过,可能是 X11 转发或图形驱动问题,Linux 下可尝试grads -l进入纯命令行模式测试。

3. 数据描述文件:GrADS 读数据的唯一入口

GrADS 不能直接读二进制数据,必须通过一个.ctl描述文件告诉它数据怎么排列。这是入门最大的门槛,也是最多人翻车的地方。理解.ctl的每个字段,比背绘图命令重要得多。

3.1 手写一个最小可用的 ctl 文件

假设你有一个二进制文件test.bin,里面是 2 个时次、1 个变量、纬度 73、经度 144 的格点数据,排列顺序是:时次 → 变量 → 纬度 → 经度。对应的.ctl如下:

dset ^test.bin undef -999.0 title Test Data xdef 144 linear 0 2.5 ydef 73 linear -90 2.5 zdef 1 linear 1000 1 tdef 2 linear 00Z01Jan2024 6hr vars 1 temp 0 99 Temperature endvars

逐行说明:

  • dset指定二进制文件名,^表示当前目录。
  • undef是缺测值,必须和写入数据时一致,否则画出来全是异常大值。
  • xdef和ydef定义经纬网格,linear 起点 步长是最常见写法。
  • zdef定义垂直层,单层就写1 linear 1000 1。
  • tdef定义时间序列,linear 起始时刻 间隔。
  • vars段声明变量名、层数、缺测标记和描述。temp 0 99中的0表示该变量不区分层次,99是缺测标记,通常和undef对应。

写完保存为test.ctl,在 GrADS 里open test.ctl,然后set gxout contour、d temp就能出图。

3.2 NetCDF 数据的 ctl 写法与常见错误

NetCDF 文件自带元数据,可以用ncdump -h查看维度。但 GrADS 经典版不直接支持 NetCDF,OpenGrADS 支持。写.ctl时,dset要写成:

dset ^data.nc dtype netcdf

其余xdef、ydef、tdef要和 NetCDF 里的维度一致。常见错误是维度顺序搞反。GrADS 默认的存储顺序是t, z, y, x,而 NetCDF 可能是time, level, lat, lon,如果变量维度顺序不同,需要在vars段用options或调整dset后的dtype参数。更稳妥的做法是用ncdump -h确认每个维度的长度和顺序,再逐一对齐。

3.3 用xdfopen快速打开 NetCDF

如果不想手写完整.ctl,OpenGrADS 提供了xdfopen命令,可以自动读取 NetCDF 的元数据生成临时描述文件。用法:

xdfopen data.nc

它会尝试推断维度和变量。但自动推断不一定准,尤其是维度的起点和步长。打开后建议用q file查看生成的描述信息,确认经纬度范围是否正确。如果不对,还是得回到手写.ctl的路子。

4. 基础绘图命令:从等值线到风场

GrADS 的绘图逻辑是“先设置维度和图形类型,再 display 变量”。命令短,但组合多。下面按最常用的几种图来拆。

4.1 设置经纬度和时间范围

每次画图前,先固定你要看的区域和时次:

set lon 100 130 set lat 20 45 set t 1 set z 1

set t 1表示第一个时次。如果不设,GrADS 会用默认值,可能不是你想要的。区域设得越小,出图越快,但要注意边界不要超出数据范围,否则会报Data Request Error。

4.2 画等值线图与色斑图

等值线是默认图形类型:

set gxout contour set cint 2 d temp

set cint 2控制等值线间隔为 2。如果不设,GrADS 自动选间隔,有时太密有时太疏。色斑图用:

set gxout shaded d temp

色斑图需要配合cbarn画色标:

cbarn

cbarn是脚本命令,需要GASCRP指向脚本库才能用。如果提示找不到命令,检查GASCRP是否设置正确。

4.3 画风场和流线图

风场需要两个分量变量,通常叫u和v:

set gxout vector d u;v

如果只想画流线:

set gxout stream d u;v

风场图常见问题是箭头太密或太稀。可以用set arrscl调整箭头比例:

set arrscl 0.5 10

第一个参数是箭头长度缩放,第二个是参考风速。多试几次找到合适的视觉密度。

4.4 叠加地图和标题

出图后通常要叠加地图边界和标题:

set map 1 1 1 draw map draw title Temperature at 1000hPa

set map的三个参数控制地图线条的颜色、类型和粗细。draw title在图的底部加标题。如果标题位置不合适,可以用set strsiz调整字号,用draw string手动定位。

5. 脚本入门:把重复操作写成 gs 文件

GrADS 脚本以.gs结尾,本质是一系列命令的集合。入门阶段不需要学复杂逻辑,先把常用操作封装成脚本,就能大幅减少重复输入。

5.1 一个批量出图的脚本模板

假设你要对多个时次循环出图,保存为plot_all.gs:

* 批量绘制不同时次的温度等值线图 function main(args) t = 1 while (t <= 8) 'set t 't 'set gxout contour' 'set cint 2' 'd temp' 'draw title Time Step 't 'printim out_'t'.png png' t = t + 1 endwhile return

在 GrADS 里运行:

run plot_all.gs

脚本里用单引号包裹 GrADS 命令,变量用t直接拼接。printim是输出图片命令,支持 png、gif 等格式。注意printim在部分版本里需要图形窗口处于活动状态,纯命令行模式可能无法输出。

5.2 用变量和循环控制绘图逻辑

脚本里可以定义变量、做简单判断。比如根据时次选择不同颜色:

if (t <= 4) 'set ccolor 2' else 'set ccolor 4' endif

ccolor控制等值线颜色。颜色编号对应 GrADS 默认色表,2 是红色,4 是蓝色。更复杂的逻辑可以调用math函数做计算,但入门阶段先把循环和条件跑通就够了。

5.3 脚本调试:看报错行号和变量值

脚本报错时,GrADS 会提示出错的行号。常见错误是变量未定义或命令拼写错误。可以在关键位置加say输出变量值:

say 'Current t is 't

这样能确认循环是否按预期执行。如果脚本中途停止,检查while的结束条件是否写错,或者endif是否配对。

6. 避坑与排查:那些让你想砸键盘的瞬间

GrADS 的报错信息往往很模糊,新手容易卡在同一个地方很久。下面几条是我和周围人踩过的典型坑。

现象:open后d temp提示Data Request Error: Invalid grid coordinates。原因:set lon或set lat的范围超出了.ctl里定义的网格范围。 解决:用q file查看实际经纬度范围,把set命令限制在范围内。注意xdef 144 linear 0 2.5的经度范围是 0 到 357.5,不是 360。

现象:画出来的图全是空白或一个颜色。原因:缺测值设置不对,或者数据排列顺序和.ctl不一致。 解决:先用set gxout print和d temp打印几个格点值,看是否在合理范围。如果全是-999或异常大数,检查undef和二进制写入时的缺测标记是否一致。

现象:cbarn命令找不到。原因:GASCRP环境变量未设置或指向错误。 解决:确认GASCRP指向包含cbarn.gs的目录。Linux 下可以用find / -name cbarn.gs定位。

现象:输出图片是空白或只有背景色。原因:printim在非交互模式下无法捕获图形窗口。 解决:确保在图形界面下运行,或者改用gxprint命令(OpenGrADS 支持)。如果必须命令行出图,可以尝试set device png后直接draw,但兼容性因版本而异。

现象:中文标题显示为乱码。原因:GrADS 默认字体不支持中文。 解决:用英文标题,或者提前用其他工具生成图片后再加中文标注。GrADS 本身对中文支持很弱,不建议在绘图阶段处理中文。

7. 进阶技巧:用gxout和define做快速诊断

入门之后,真正提升效率的是两个东西:gxout的灵活切换和define的中间变量。gxout除了contour、shaded、vector,还有grfill、fgrid、stream等。grfill适合画格点填充图,fgrid可以叠加网格线。切换图形类型不需要重新读数据,直接set gxout再d即可。

define用来定义中间变量,避免重复计算。比如你要画温度平流,可以先算梯度:

define dtx = cdiff(temp, x) define dty = cdiff(temp, y) define adv = -u*dtx - v*dty set gxout shaded d adv

cdiff是中央差分函数,x和y表示方向。这样算出来的adv可以直接 display,不用每次重新算。注意define的变量只在当前会话有效,脚本里用define后要确保后续命令能访问到。

另一个实用技巧是用set clevs手动指定等值线层级:

set clevs 0 5 10 15 20 set ccols 2 3 4 5 6 d temp

clevs指定层级,ccols指定对应颜色。这样能精确控制色斑图的分布,避免自动分级把关键区间合并掉。对于需要对比多张图的场景,固定clevs和ccols能让视觉一致性更好。

我自己的习惯是:每打开一个新数据,先用q file和q dim把维度和范围确认一遍,再写一个最小.ctl测试d能不能出数,最后才去调图形样式。这个顺序能省掉大量返工。GrADS 虽然老,但在快速诊断和批量出图上依然能打。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询