GMT4

软件来源

http://mirrors.ustc.edu.cn

适用平台

Linux、macOS、Windows

推荐阅读

GMT4 官方文档

更新日期

2021-01-27


注解

目前 GMT4 和 GMT5 都已经停止维护,建议直接学习 GMT6

安装

2018 年官方推出 GMT4.5.18 后不再对 GMT4 进行维护。

由于很多老的脚本都是用 GMT4 的语法写的,全部修改成新的语法很麻烦而且没有必要,最好的办法就是同时安装 GMT4 和 GMT 的最新版本。

下面简要介绍 GMT4 的安装。

警告

如果已经安装了 Anaconda ,安装 GMT 过程中可能会出现找不到依赖库的情况,把 Anaconda 环境变量注释后再安装 GMT,完成后再取消注释即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 # 安装编译所需软件包
 $ sudo apt update
 $ sudo apt install ghostscript
 $ sudo apt install gcc g++ make libc6    # 开发工具
 $ sudo apt install libnetcdf-dev libxaw7-dev
 # 下载软件包
 $ wget http://mirrors.ustc.edu.cn/gmt/gmt-4.5.18-src.tar.bz2
 $ wget http://mirrors.ustc.edu.cn/gmt/gshhg-gmt-2.3.7.tar.gz
 # 解压
 $ tar -xvf gmt-4.5.18-src.tar.bz2
 # 编译安装 GMT4
 $ cd gmt-4.5.18
 $ ./configure --prefix=/home/zhao/opt/GMT4  # 指定 gmt 安装路径
 $ make
 $ sudo make install-all
 $ cd ../
 # 解压海岸线数据
 $ tar -xvf gshhg-gmt-2.3.7.tar.gz
 # 移动到 GMT4 安装目录
 $ sudo mv gshhg-gmt-2.3.7 ~/opt/GMT4/share/coast
 # 修改环境变量
 $ echo 'export GMT4HOME=/home/zhao/opt/GMT4' >> ~/.bashrc
 $ echo 'export PATH=${GMT4HOME}/bin:$PATH'>> ~/.bashrc
 $ echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT4HOME}/lib64'>> ~/.bashrc
 $ exec $SHELL -l
 $ psxy -   # 测试
 # GMT4 配置中文
 $ sudo vim /opt/GMT4/share/pslib/PS_font_info.d
     # 在文末添加字体
     STSong-Light--UniGB-UTF8-H  0.700    1
     STFangsong-Light--UniGB-UTF8-H  0.700    1
     STHeiti-Regular--UniGB-UTF8-H   0.700   1
     STKaiti-Regular--UniGB-UTF8-H   0.700   1
 $ pstext -L  # 查看 gmt 当前支持字体
 # ghostscript 配置中文
 $ sudo apt install poppler-data
 $ sudo apt install fonts-arphic-uming fonts-arphic-ukai  # 安装 gs 默认 Linux 字体
 # 新建 winfonts 文件夹
 $ sudo mkdir /usr/share/fonts/winfonts/
 # 将 Windows 下的中文字体拷贝过来
 $ sudo cp /mnt/c/windows/fonts/{simhei.ttf,simkai.ttf,simsun.ttc,simfang.ttf} /usr/share/fonts/winfonts
 # 修改 gs 中文配置文件
 $ sudo vim /etc/ghostscript/cidfmap.d/90gs-cjk-resource-gb1.conf
     % 原配置文件的内容,与 STSong-Light 等相关的四行必须删除
     /BousungEG-Light-GB <</FileType /TrueType /Path (/usr/share/fonts/truetype/arphic/uming.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /GBZenKai-Medium    <</FileType /TrueType /Path (/usr/share/fonts/truetype/arphic/ukai.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /Song-Medium /GBZenKai-Medium ;
     /Adobe-GB1      /BousungEG-Light-GB ;
     /Adobe-GB1-Bold /GBZenKai-Medium ;
     % 新增 Windows 字体的支持
     /STSong-Light <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simsun.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /STFangsong-Light <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simfang.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /STHeiti-Regular <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simhei.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /STKaiti-Regular <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simkai.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
 $ sudo update-gsfontmap
 # 中文测试
 $ vim gmt4.5.18-cn-test.sh
     #!/bin/bash
     gmtset HEADER_FONT 35
     pstext -R0/10/0/3 -JX15c/3c -B1/1:."GMT中文支持": -P > cn.ps <<EOF
     1.5 2 30 0 35 LM GMT宋体
     1.5 1 30 0 36 LM GMT仿宋
     5.5 2 30 0 37 LM GMT黑体
     5.5 1 30 0 38 LM GMT楷体
     EOF
     ps2raster cn.ps -A -P -Tg
     rm .gmt* cn.ps
     EOF
 $ bash gmt4.5.18-cn-test.sh  # 执行脚本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 # 安装编译所需软件包
 $ sudo yum install gcc gcc-c++ make glibc  # 开发工具
 $ sudo yum install netcdf netcdf-devel gdal gdal-devel gdal-python  # netCDF 库
 $ sudo yum install libXaw-devel  # X 相关库
 $ sudo yum install libICE-devel libSM-devel libX11-devel
 $ sudo yum install libXext-devel libXmu-devel libXt-devel
 # 下载软件包
 $ wget http://mirrors.ustc.edu.cn/gmt/gmt-4.5.18-src.tar.bz2
 $ wget http://mirrors.ustc.edu.cn/gmt/gshhg-gmt-2.3.7.tar.gz
 # 解压
 $ tar -xvf gmt-4.5.18-src.tar.bz2
 # 编译安装 GMT4
 $ cd gmt-4.5.18
 $ ./configure --prefix=/home/zhao/opt/GMT4  # 指定 gmt 安装路径
 $ make
 $ sudo make install-all
 $ cd ../
 # 解压海岸线数据
 $ tar -xvf gshhg-gmt-2.3.7.tar.gz
 # 移动到 GMT4 安装目录
 $ sudo mv gshhg-gmt-2.3.7 ~/opt/GMT4/share/coast
 # 修改环境变量
 $ echo 'export GMT4HOME=/home/zhao/opt/GMT4' >> ~/.bashrc
 $ echo 'export PATH=${GMT4HOME}/bin:$PATH'>> ~/.bashrc
 $ echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT4HOME}/lib64'>> ~/.bashrc
 $ exec $SHELL -l
 $ psxy -   # 测试
 # GMT4 配置中文
 $ sudo vim /opt/GMT4/share/pslib/PS_font_info.d
     # 在文末添加字体
     STSong-Light--UniGB-UTF8-H  0.700    1
     STFangsong-Light--UniGB-UTF8-H  0.700    1
     STHeiti-Regular--UniGB-UTF8-H   0.700   1
     STKaiti-Regular--UniGB-UTF8-H   0.700   1
 $ pstext -L  # 查看 gmt 当前支持字体
 # ghostscript 配置中文
 $ ssudo yum install ghostscript-chinese-zh_CN  # 安装 gs 简体中文配置文件
 # 新建 winfonts 文件夹
 $ sudo mkdir /usr/share/fonts/winfonts/
 # 将 Windows 下的中文字体拷贝过来
 $ sudo cp /mnt/c/windows/fonts/{simhei.ttf,simkai.ttf,simsun.ttc,simfang.ttf} /usr/share/fonts/winfonts
 # 修改 gs 中文配置文件
 $ sudo vim /usr/share/ghostscript/conf.d/cidfmap.zh_CN
     % 原配置文件的内容,与 STSong-Light 等相关的四行必须删除
     /BousungEG-Light-GB <</FileType /TrueType /Path (/usr/share/fonts/truetype/arphic/uming.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /GBZenKai-Medium    <</FileType /TrueType /Path (/usr/share/fonts/truetype/arphic/ukai.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /Song-Medium /GBZenKai-Medium ;
     /Adobe-GB1      /BousungEG-Light-GB ;
     /Adobe-GB1-Bold /GBZenKai-Medium ;
     % 新增 Windows 字体的支持
     /STSong-Light <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simsun.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /STFangsong-Light <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simfang.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /STHeiti-Regular <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simhei.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
     /STKaiti-Regular <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simkai.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
 # 中文测试
 $ vim gmt4.5.18-cn-test.sh
     #!/bin/bash
     gmtset HEADER_FONT 35
     pstext -R0/10/0/3 -JX15c/3c -B1/1:."GMT中文支持": -P > cn.ps <<EOF
     1.5 2 30 0 35 LM GMT宋体
     1.5 1 30 0 36 LM GMT仿宋
     5.5 2 30 0 37 LM GMT黑体
     5.5 1 30 0 38 LM GMT楷体
     EOF
     ps2raster cn.ps -A -P -Tg
     rm .gmt* cn.ps
     EOF
 $ bash gmt4.5.18-cn-test.sh  # 执行脚本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 1.  安装 GMT4
     - http://mirrors.ustc.edu.cn/gmt/bin/gmt-4.5.18-win64.exe
     - http://mirrors.ustc.edu.cn/gmt/bin/gmt-4.5.18-pdf-win32.exe
     - http://mirrors.ustc.edu.cn/gmt/bin/gshhg-2.3.7-win32.exe
     依次安装,完成后在 C:\programs\gmt4\share\pslib\ 中加入如下语句:
         STSong-Light--GB-EUC-H  0.700    1
         STFangsong-Light--GB-EUC-H  0.700    1
         STHeiti-Regular--GB-EUC-H   0.700   1
         STKaiti-Regular--GB-EUC-H   0.700   1
 2.  安装 Ghostscript
     - https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs950/gs950w64.exe
     安装过程中必须勾选 Generate cidfmap for Windows CJK TrueType fonts 。
     安装完成后必须添加环境变量:新建变量 GS_FONTPATH 并设置其值为 C:\Windows\fonts
 3.  安装 UnixTools

     - https://gmt-china.org/data/UnixTools.zip
     直接下载并解压到 GMT 的 bin 目录。
 4.  安装 Sumatra PDF 查看 PS 格式文件
     - https://www.sumatrapdfreader.org/free-pdf-reader.html

用法指南

GMT4 绘图脚本非常简单,无非就是以下三步:配置参数设置变量模块绘图

配置参数时可以利用 gmtdefaults 模块来快速查询参数具体名称和参数值的格式。

设置变量是为了简化脚本,在不同平台设置变量的语法不同,可根据实际情况自行搜索。

模块绘图需要你了解所有 GMT 常用模块的基本用途,这样你才能知道绘图时都需要用到哪些模块,我们不需要把所有模块的语法全部背会,用到的时候去查模块的用法就可以了。模块绘图的顺序就跟画画是一样的,从最底层画起,一层盖一层,最终完成绘制。

绘图时脚本中所有的单位都应该显式表达,比如 JX6c/-3c 最好不要写成 JX6/-3,因为不同电脑中默认单位可能会不一致。

最容易出错的地方就是模块绘图时 -K -O > >> 的使用,请给予足够重视。

掌握了脚本的写作思路后,剩下的就是根据实际需要去查询模块用法了。需要了解的是,在每个模块之后都有一些如 -R -W 之类的选项,在所有模块中含义用法都相同的选项叫做标准选项,而非标准选项在不同模块中的用法含义完全不同;在使用某个模块时必须要用的选项叫做必选选项,可用可不用的选项叫做这个模块的可选选项

常见问题

  • make 时报错: xgrid_Panner.c:4:10: fatal error: X11/Xaw/Scrollbar.h: No such file or directory

登录 https://pkgs.org/ ,在网页右上角搜索 Scrollbar.h ,然后在 Search 一栏选择 Files,根据筛选条件对 Filter 进行修改,找到所需的包后点击查看,例如在 Ubuntu 下 Package namelibxaw7-dev,直接 sudo apt install libxaw7-dev 即可解决。

附录

gmtdefaults 模块用来列出 GMT 所有参数的系统默认值或当前值:

$ gmtdefautls -D   # 列出所有参数的系统默认值
$ gmtdefautls -L   # 列出所有参数的当前值

它的主要用处是快速查询某个参数的准确名称或参数值的格式:

$ gmtdefaults -L | grep PLOT
    PLOT_CLOCK_FORMAT       = hh:mm:ss
    PLOT_DATE_FORMAT        = yyyy-mm-dd
    PLOT_DEGREE_FORMAT      = ddd:mm:ss

下面列出 GMT4 所有参数的简介,详细用法请参考该模块的 官方文档

$ gmtdefaults -L
#
#-------- Plot Media Parameters -------------
PAGE_COLOR          = white     # 纸张背景色
PAGE_ORIENTATION    = landscape  # 纸张方向为水平,垂直用portrait
PAPER_MEDIA         = a4    # 纸张大小
#-------- Basemap Annotation Parameters ------
ANNOT_MIN_ANGLE             = 20 # 倾斜投影最小标注角
ANNOT_MIN_SPACING   = 0  # 相邻标注间最小距离
ANNOT_FONT_PRIMARY  = Helvetica  # 主轴标注字体
ANNOT_FONT_SIZE_PRIMARY     = 14p  # 主轴标注字体大小
ANNOT_OFFSET_PRIMARY        = 0.2c  # 主轴标注与主轴之间的距离
ANNOT_FONT_SECONDARY        = Helvetica  # 次轴标注字体
ANNOT_FONT_SIZE_SECONDARY   = 16p  # 次轴标注字体大小
ANNOT_OFFSET_SECONDARY      = 0.2c  # 次轴标注与次轴之间的距离
DEGREE_SYMBOL               = ring  # 度符号
HEADER_FONT         = Helvetica  # 标题字体
HEADER_FONT_SIZE    = 36p    # 标题字体大小
HEADER_OFFSET               = 0.5c   # 标题与上边界的距离
LABEL_FONT          = Helvetica  # 轴标签字体
LABEL_FONT_SIZE             = 24p    # 轴标签字体大小
LABEL_OFFSET                = 0.3c   # 轴标注底部与轴标签顶部之间的距离
OBLIQUE_ANNOTATION  = 1    # 倾斜投影的标注方式
PLOT_CLOCK_FORMAT   = hh:mm:ss  # 绘图时间标注格式
PLOT_DATE_FORMAT    = yyyy-mm-dd  # 绘图日期标注格式
PLOT_DEGREE_FORMAT  = ddd:mm:ss  # 绘图经纬度标注格式,常用 ddd.xF
Y_AXIS_TYPE         = hor_text  # Y轴标注水平或垂直 ver_text
#-------- Basemap Layout Parameters ---------
BASEMAP_AXES                = WESN   # 控制显示标注的边框,常用 WesN
BASEMAP_FRAME_RGB   = black  # 底图边框的颜色
BASEMAP_TYPE                = fancy  # 底图类型。inside:标注和刻度朝内。graph:线性投影,轴有箭头。fancy:火车轨道。plain:线。
FRAME_PEN           = 1.25p  # plain 边框宽度
FRAME_WIDTH         = 0.2c   # fancy 边框宽度
GRID_CROSS_SIZE_PRIMARY     = 0c  # 一级网格线的交叉线大小,0表示连续
GRID_PEN_PRIMARY    = 0.25p # 一级网格线的线条属性
GRID_CROSS_SIZE_SECONDARY   = 0c # 二级网格线的交叉线大小,0表示连续
GRID_PEN_SECONDARY  = 0.5p  # 二级网格线的线条属性
MAP_SCALE_HEIGHT    = 0.2c  # 地图比例尺高度
POLAR_CAP           = 85/90  # 控制两极地区网格线
TICK_LENGTH         = 0.2c  # 刻度线的长度,负值代表向内,-JX6i/-3i表示Y轴反向
TICK_PEN            = 0.5p  # 刻度线的属性
X_AXIS_LENGTH               = 25c  # 设置x轴默认长度
Y_AXIS_LENGTH               = 15c  # 设置y轴默认长度
X_ORIGIN            = 2.5c  # 新图在纸张上的原点坐标
Y_ORIGIN            = 2.5c  # 新图在纸张上的原点坐标
UNIX_TIME           = FALSE  # 是否显示时间戳,可用-U控制
UNIX_TIME_POS               = BL/-2c/-2c # 时间戳位置
UNIX_TIME_FORMAT    = %Y %b %d %H:%M:%S  # 时间戳格式
#-------- Color System Parameters -----------
COLOR_BACKGROUND    = black   # 图片背景色,Z值小于cpt文件中最小值时的颜色
COLOR_FOREGROUND    = white  # 图片前景色,Z值大于cpt文件中最大值时的颜色
COLOR_NAN           = 128   # Z值为NAN时的颜色
COLOR_IMAGE         = adobe   # 控制PS的渲染方式
COLOR_MODEL         = rgb   # 对cpt文件插值时使用的颜色模型
HSV_MIN_SATURATION  = 1   # 模拟光照时最小负强度对应的饱和度S值
HSV_MAX_SATURATION  = 0.1 # 模拟光照时最大正强度对应的饱和度S值
HSV_MIN_VALUE               = 0.3 # 模拟光照时最小负强度对应的明度V值
HSV_MAX_VALUE               = 1   # 模拟光照时最大正强度对应的明度V值
#-------- PostScript Parameters -------------
CHAR_ENCODING               = ISOLatin1+  # 字符编码
DOTS_PR_INCH                = 300  # 绘图精度,每英寸像素数
GLOBAL_X_SCALE              = 1   # 整体缩放时x方向的比例
GLOBAL_Y_SCALE              = 1   # 整体缩放时y方向的比例
N_COPIES            = 1   # 每张图的绘图数量
PS_COLOR            = rgb  # 设置生成PS代码时使用的颜色模型
PS_IMAGE_COMPRESS   = lzw  # 设置PS中图像压缩算法
PS_IMAGE_FORMAT             = ascii  # 生成PS图像格式
PS_LINE_CAP         = butt # 控制线段端点绘制方式。butt:不对端点做处理。round:端点处为直径与线宽相等的半圆弧。square:端点处为边长与线宽相等的半个正方形。
PS_LINE_JOIN                = miter # 控制线段拐点的绘制方式。
PS_MITER_LIMIT              = 35  # 设置 miter 拐角的角度阈值
PS_VERBOSE          = FALSE # 是否在PS文件中写详细注释
TRANSPARENCY                = 0  # 设置透明度
#-------- I/O Format Parameters -------------
D_FORMAT            = %.12lg  # 双精度浮点数的输出格式
FIELD_DELIMITER             = tab   # GMT输出每列的分隔符
GRIDFILE_FORMAT             = nf   # 默认网格文件格式
GRIDFILE_SHORTHAND  = FALSE  # 是否检查网格文件后缀名
INPUT_CLOCK_FORMAT  = hh:mm:ss  # 输入文件的时间格式
INPUT_DATE_FORMAT   = yyyy-mm-dd  # 输入文件的日期格式
IO_HEADER           = FALSE  # 输入输出文件是否有头段
N_HEADER_RECS               = 1  # 如果有头端默认为1个
NAN_RECORDS         = pass  # 遇到NAN值跳过
OUTPUT_CLOCK_FORMAT = hh:mm:ss  # 输出文件的时间格式
OUTPUT_DATE_FORMAT  = yyyy-mm-dd  # 输出文件的日期格式
OUTPUT_DEGREE_FORMAT        = D  # 控制地理坐标数据的输出格式
XY_TOGGLE           = FALSE  # 经纬度互换
#-------- Projection Parameters -------------
ELLIPSOID           = WGS-84  # 地球椭球模型
MAP_SCALE_FACTOR    = default # 最小化面积失真所使用的比例因子
MEASURE_UNIT                = cm  # 默认单位长度
#-------- Calendar/Time Parameters ----------
TIME_FORMAT_PRIMARY = full # 一级标注中月份、周名的格式。full:January。abbrevaite:Jan。character:J。
TIME_FORMAT_SECONDARY       = full # 二级标注中月份、周名的格式
TIME_EPOCH          = 2000-01-01T12:00:00  # 指定所有相对时间的参考时刻
TIME_IS_INTERVAL    = OFF  # 输入日期不按间隔调整
TIME_INTERVAL_FRACTION      = 0.5   # 时间标注置于间隔中心
TIME_LANGUAGE               = us   # 时间语言
TIME_UNIT           = d  # 指定相对时间数据相对于参考时刻的单位
TIME_WEEK_START             = Sunday  # 指定一周的第一天
Y2K_OFFSET_YEAR             = 1950  # 给定用两位数字表示四位数年份时100年序列的第一年1950-2049,51表示1951,20表示2020
#-------- Miscellaneous Parameters ----------
HISTORY                     = TRUE # 是否记录历史命令中的参数
INTERPOLANT         = akima  # 一维插值算法
LINE_STEP           = 0.025c  # 绘制直线时取点的间隔
VECTOR_SHAPE                = 0    # 矢量箭头形状。0:三角形。1:箭头形状。2:打开的v字
VERBOSE                     = FALSE # 运行时是否显示详细信息,-V