随着地球科学研究越来越依赖大规模、多类型数据,科研绘图已成为数据处理、分析和结果复现的重要组成部分。GMT长期以来是地球、海洋和行星科学中常用的地理空间处理与制图工具,但其命令行语法和文件驱动的数据交换方式对部分使用者形成了较高门槛。Tian等(2026)系统介绍了PyGMT的设计目标、技术架构、应用能力和开放开发模式,并通过多类实例说明PyGMT如何将GMT的计算与制图能力引入Python科学计算生态。
1从GMT命令行转向Python工作流
GMT自1991年公开发布以来,已形成覆盖地图投影、网格处理、空间分析和科学制图的模块体系。然而,GMT命令通常由单字母选项及修饰符构成,复杂任务还需要在多个命令之间传递文件,不熟悉命令行和Shell脚本的使用者较难快速掌握。
PyGMT并未重新实现GMT,而是通过Python接口调用其底层能力。研究将绘图功能集中到Figure类中,以coast、plot、text和grdimage等方法逐层构建图件,并用region、projection、frame等含义明确的参数替代短选项。列表、布尔值和日期时间等Python对象可直接输入,自动补全和类型提示也有助于减少语法错误。
图1 GMT命令行脚本与PyGMT脚本生成同一图件的代码对比及结果
2内存数据交换连接两个软件生态
PyGMT通过ctypes机制直接加载GMT共享库,而不是反复创建外部进程。NumPy数组可通过底层数据指针与GMT的C语言接口连接,从而减少临时文件和进程调用产生的开销。研究进一步利用GMT虚拟文件机制,将Python对象映射为GMT内部数据容器,表格和网格计算结果可直接返回为DataFrame、ndarray或DataArray。
这一机制使PyGMT成为GMT与科学Python生态之间的双向接口。NumPy负责数组计算,pandas处理表格与时间序列,xarray管理带坐标的多维网格,rioxarray、contextily、GeoPandas和PyArrow则补充栅格、在线地图、矢量数据和大规模表格处理能力。PyGMT还为xarray提供gmt访问器,使网格滤波、梯度计算和元数据管理可直接作用于DataArray对象。
图2 PyGMT连接GMT与科学Python及地理空间软件生态的结构
3 多类型地理空间数据的统一表达
研究以冰岛为例展示PyGMT的基础制图能力。同一区域可分别绘制海陆分布图、OpenStreetMap在线瓦片图、二维地形水深图和三维透视地形图。地形数据可从GMT远程服务器直接读取,再通过色标、阴影和视角参数完成表达。在线瓦片功能由PyGMT结合contextily和GMT栅格模块实现,说明Python接口还可通过外部库扩展GMT工作流。
图3 冰岛地区的海陆分布、在线地图瓦片、二维地形水深和三维透视地形图
研究随后以2000—2025年安达曼—苏门答腊—爪哇俯冲带中深源和深源地震为例,展示地震目录读取、筛选和符号化表达。震中大小随震级变化,颜色表示震源深度,主图内嵌入对数坐标的震级直方图。该实例表明,目录处理、属性计算、地图绘制和统计表达可以在同一Python脚本中完成。
图4 2000—2025年安达曼—苏门答腊—爪哇俯冲带震源深度不小于70千米、震级不小于5的地震分布及震级直方图
4 从地球制图扩展到行星与矢量数据
PyGMT并不局限于地球参考系统。研究利用火星轨道器激光高度计数据,设置火星参考椭球,对全球地形实施50千米宽度的高斯低通滤波并计算光照梯度,最终绘制两个半球的长波长火星地形。数据读取、网格处理、地图投影和制图均在同一环境中完成,减少了在多个软件之间转换文件和坐标系统的需求。
图5 基于10角分MOLA数据获得的火星长波长地形半球视图
研究还结合GeoPandas处理Natural Earth矢量数据,绘制美国州界、主要河流和城市。面、线、点对象可由GeoDataFrame直接传入PyGMT,州面积经等面积投影计算后用于分级设色,阿拉斯加和夏威夷则以独立投影嵌入主图。该实例说明,PyGMT能够与空间筛选、属性计算和坐标转换连续衔接。
图6 美国州界、主要河流和城市分布,州多边形按照面积着色,阿拉斯加和夏威夷采用独立投影显示
研究指出,科研软件的价值不仅取决于功能,也取决于测试、文档、版本管理和社区维护。PyGMT采用BSD 3-Clause许可证,代码托管于GitHub,所有修改通过拉取请求审查,并在Windows、macOS和Linux环境下执行持续集成。自动流程包括代码风格检查、类型检查、性能测试和完整测试套件,论文发表时的测试覆盖率约为99%。文档按照教程、操作指南、原理说明和API参考组织,示例可下载为Jupyter Notebook或Python脚本。
PyGMT可通过conda、mamba或PyPI安装,也可在Binder和Google Colab中运行。项目采用语义化版本管理,并为不同版本建立Zenodo存档和DOI。研究利用GMT、GMT/MEX、GMT.jl和PyGMT自2016年以来的GitHub星标变化展示项目关注度,同时指出该指标只能粗略反映软件在GitHub上的可见度。
图7 2016年以来GMT、GMT/MEX、GMT.jl和PyGMT项目的GitHub星标数量变化
6 当前边界与未来方向
论文发表时,PyGMT已封装GMT核心模块中的约20个绘图模块和30个非绘图模块,以及4个补充模块,但尚未覆盖GMT全部功能,部分模块也未提供所有Python化参数。对于缺失选项,熟悉GMT的使用者仍可临时传入单字母参数。后续开发将继续增加模块封装和高层绘图方法,并根据社区需求、功能请求和贡献情况确定优先级。
在大数据处理方面,PyGMT能够接收由Dask支持的xarray和pandas对象,但目前尚不能保持惰性计算,数据在传入GMT前仍需加载到内存。研究将并行与超内存计算框架的深度集成列为潜在方向,同时探索通过Pyodide使PyGMT直接在浏览器本地运行,以降低教学和初学使用中的安装成本。
7 总结
该研究表明,PyGMT并非GMT的简单语法替换,而是连接GMT地理空间能力与Python数据分析生态的接口层。其核心优势体现在内存数据交换、Python原生对象支持、可读参数设计和多库协同工作流。冰岛底图、俯冲带地震、火星地形、美国矢量地图和时间序列等实例展示了其跨数据类型与跨学科适用性。与此同时,模块覆盖程度、大规模数据计算和浏览器运行仍是持续开发方向。对于需要完成数据处理、空间分析、科研制图和结果复现的地球科学研究,PyGMT提供了一条统一且可扩展的技术路径。
8 论文引用
Tian, D., Fröhlich, Y., Leong, W. J., Grund, M., Schlitzer, W., Jones, M., Uieda, L., & Luis, J. M. F. (2026). PyGMT: Bridging Python and the Generic Mapping Tools for Geospatial Visualization and Analysis. Geochemistry, Geophysics, Geosystems, 27(7), e2026GC013105. https://doi.org/10.1029/2026GC013105
9 项目地址
https://github.com/GenericMappingTools/pygmt
10 官方文档
https://www.pygmt.org/latest/
关注我,每日获取最新地震学研究进展⬇⬇⬇