PyGMT作为实现GMT绘图的Python包,是地球科学中广泛应用的命令行程序。它提供了处理空间数据(网格化、过滤、遮蔽、FFT 等)和绘制高质量平面图和地图的功能。本文介绍PyGMT在Linux或macOS下的配置与安装。
PyGMT与Bokeh、Matplotlib等常规的Python库不同,后者更加注重交互性,并允许使用不同的后端。GMT则使用PostScript(.ps)格式为出版物、海报等生成高质量(静态)矢量图形,它的存储效率很高,而且速度非常快。用户可以将.ps图形转换为其他格式,例如PDF,PNG和JPG等多种格式,以在Web上和其他地方使用。实际上,PyGMT用户通常不会与原始PostScript文件建立任何联系,而只会获得更方便的格式,例如PDF和PNG等。
Python版本要求
目前PyGMT要求3.6或者更高版本Python。
官方建议使用Anaconda的Python发行版,anaconda的优点在于能够保证conda包管理器的可用性,同时确保系统可以满足PyGMT的所有依赖关系。anaconda不要求计算机的管理员权限,同时也不会影响系统中任何已经安装的python版本。
GMT版本要求
PyGMT要求GMT的版本至少为6.0,GMT6.0是最新的发布版本,可以在这里找到。
随着PyGMT的不断开发,GMT本身也做出了很多相应的改变(主要是新出现的现代模式),因此PyGMT要求GMT版本至少为6.0或以上。
用户通过conda-forge
获取为Linux、Mac和Windows编译的GMT的conda软件包,高级用户也可以从源码构建GMT。
依赖
PyGMT要求安装以下库:
以下是可选(但建议)依赖项:
- IPython 用于Jupyter notebooks中图形的显示.
安装GMT及其他依赖项
在安装PyGMT之前,必须要安装GMT本身以及其他依赖项。最简单的方法就是使用conda包管理器,建议在隔离的conda虚拟环境中进行,以免其依赖项与其他python的依赖项版本互相干扰或矛盾。
-
配置conda,以实现从conda-forge channel获取软件包:
1
conda config --prepend channels conda-forge
-
创建一个新的conda虚拟环境,并安装Python和所有依赖项,假定新的conda环境命名为“pygmt”:
1
conda create --name pygmt python=3.6 pip numpy pandas xarray packaging gmt=6.0.0
-
运行以下代码,激活新建的conda环境:
1
conda activate pygmt
如遇到conda虚拟环境管理的问题,请自行百度。
至此,所有命令都会在新建的conda环境中运行,不会影响到python的默认安装。
注意:
目前只在Linux和macOS上进行了测试,而未在Windows上运行测试,因此在windows下安装配置可能会出错。你也可以在Github上创建问题反馈错误。
安装PyGMT
整了这么久,终于到了安装主角(PyGMT)的环节。
到这一步,我们已经安装好了GMT,并激活了的conda环境,接下来就可以使用pip
从Github安装最新的PyGMT源文件:
1 | pip install https://github.com/GenericMappingTools/pygmt/archive/master.zip |
或者,也可以用git
将PyGMT的仓库克隆到本地,然后使用pip
进行安装:
1 | git clone https://github.com/GenericMappingTools/pygmt.git |
这将允许您使用pygmt中的Python库。
测试安装
PyGMT配备完整的测试套件,可以在安装后运行测试,不过还需要一些额外的依赖项(当然,运行前请务必激活你的的 conda env):
1 | import pygmt |
测试大概需要几十秒时间(慢的话可能几分钟),完成后可能会提示有部分软件包测试失败,虽然官方手册里没有说怎么办,但是我想这些失败或者缺失的包应该自己动手安装吧。
查找 GMT 共享库
如果安装了多个版本的GMT,则可能致使PyGMT将找不到正确版本的GMT共享库。
可以通过设置环境变量GMT_LIBRARY_PATH
来告诉PyGMT去哪里能够准确地找到libgmt
,因此这个变量值应该设置为Linux、MacOS以及Windows分别对应的libgmt.so
、libgmt.dylib
或者gmt.dll
等文件的路径。在终端运行:
1 | export GMT_LIBRARY_PATH=$HOME/anaconda3/envs/pygmt/lib |
安装完成!
第一个官方例子
在Jupyter notebook下运行一下命令进行绘图,但记得加上%matplotlib inline
命令来显示图像。
1 | import pygmt |
运行结果:
在PyGMT绘图命令中,各个选项的参数可以通过数值或字符串及其列表来提供,例如上面代码中:
frame
相当于gmt中的-B
标准选项,在PyGMT中其参数可以通过一个省略-B
的字符串列表来提供;region
相当于-R
,其横纵坐标上下限,为一个整形数值列表;projection
投影方式为字符串"M8i"
是不是很简单。
并且在GMT6中大部分绘图模块已经删除了ps前缀,其新的模块名称在一定程度上与PyGMT绘图模块名保持了一致,因此如果你对GMT6足够熟悉,只需要知道你要用的模块名便可以在 Jupyter notebook 中通过运行fig.模块名?
来查看相应模块的帮助文档。
Python绘制地图的能力飙升!
对于一个gmt重度用户来说,python地学数据可视化的学习成本骤降,从此,妈妈再也不用担心我不会用python画地图了!
运行下面代码,来保存图片为png格式,当然也支持其他位图及矢量图格式。
1 | fig.savefig("test1.png") |