简介这份资源是面向气象、环境及科研数据分析初学者的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/scriptsGADDIR指向字体和地图数据GASCRP指向脚本库。这两个变量不设GrADS 启动后画地图会报“无法打开地图文件”。2.2 Windows 下的安装与路径陷阱Windows 用户通常下载 OpenGrADS 的 exe 安装包。安装时注意两点一是路径不要带中文和空格二是安装完成后需要手动设置环境变量。很多新手装完双击图标能打开但一画图就提示找不到data目录就是因为GADDIR没设。在“系统属性 → 环境变量”里新建GADDIRC:\OpenGrADS\Contents\Resources\SupportDataGASCRPC:\OpenGrADS\Contents\Resources\Scripts在Path里追加C:\OpenGrADS\Contents\Cygwin\Versions\2.1.a2\i686\具体路径以你实际安装目录为准。设置完重新打开命令行输入grads -v能看到版本号即成功。2.3 验证安装画一张默认地图安装后别急着读数据先用内置命令确认环境正常。启动 GrADSgrads进入交互界面后输入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 经典版不直接支持 NetCDFOpenGrADS 支持。写.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如果不想手写完整.ctlOpenGrADS 提供了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 1set t 1表示第一个时次。如果不设GrADS 会用默认值可能不是你想要的。区域设得越小出图越快但要注意边界不要超出数据范围否则会报Data Request Error。4.2 画等值线图与色斑图等值线是默认图形类型set gxout contour set cint 2 d tempset cint 2控制等值线间隔为 2。如果不设GrADS 自动选间隔有时太密有时太疏。色斑图用set gxout shaded d temp色斑图需要配合cbarn画色标cbarncbarn是脚本命令需要GASCRP指向脚本库才能用。如果提示找不到命令检查GASCRP是否设置正确。4.3 画风场和流线图风场需要两个分量变量通常叫u和vset 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 1000hPaset 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 endifccolor控制等值线颜色。颜色编号对应 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 advcdiff是中央差分函数x和y表示方向。这样算出来的adv可以直接 display不用每次重新算。注意define的变量只在当前会话有效脚本里用define后要确保后续命令能访问到。另一个实用技巧是用set clevs手动指定等值线层级set clevs 0 5 10 15 20 set ccols 2 3 4 5 6 d tempclevs指定层级ccols指定对应颜色。这样能精确控制色斑图的分布避免自动分级把关键区间合并掉。对于需要对比多张图的场景固定clevs和ccols能让视觉一致性更好。我自己的习惯是每打开一个新数据先用q file和q dim把维度和范围确认一遍再写一个最小.ctl测试d能不能出数最后才去调图形样式。这个顺序能省掉大量返工。GrADS 虽然老但在快速诊断和批量出图上依然能打。希望帮到你。本文还有配套的精品资源点击获取