✍️ 田冬冬 , 陈箫翰 , 周茂 , 王亮 , 何星辰 , 姚家园  •  📅 2026-01-23

plot

官方文档:

plot

简介:

在图上绘制线段、多边形和符号

读取 (x,y) 坐标数据,并在图上的相应位置绘制线、多边形或符号。

  • 使用 -S 选项,在数据点所在位置绘制符号。 如果参数中没有给出符号大小,则会将输入数据的第三列解释为符号大小,符号大小必须大于 0 。 如果参数中没有指定具体绘制哪种符号,则输入数据的最后一列必须是符号代码。 使用 -G 选项设置符号的填充颜色或填充图案。 使用 -W 选项绘制符号的轮廓,并设置轮廓的画笔属性。

  • 不使用 -S 选项,则绘制线条把数据点依次连接。 使用 -L 选项会把最后一个数据点和第一个数据点相连,绘制出一个闭合多边形。 使用 -G 选项设置闭合多边形的填充颜色或填充图案。 使用 -W 选项设置线条或多边形各边的画笔属性。

语法

gmt plot [ table ] [ -A[x|y] ] [ -B[p|s]parameters ] [ -Ccpt ] [ -Ddx[/dy] ] [ -E[x|y|X|Y][+a|A][+cl|f][+n][+wwidth[/cap]][+ppen] ] [ -F[c|n|p][a|s|t|r|refpoint] ] [ -Gfill|+g|+z ] [ -H[scale] ] [ -I[intens] ] [ -Jparameters ] [ -L[+b|d|D][+xl|r|x0][+yb|t|y0][+ppen] ] [ -M[c|s][+lseclabel][+gfill][+ppen][+rpen][+y[level]] ] [ -N[c|r] ] [ -Rwest/east/south/north[+r][+uunit] ] [ -S[symbol][size] ] [ -U[stamp] ] [ -V[level] ] [ -W[pen][attr] ] [ -X[a|c|f|r][xshift] ] [ -Y[a|c|f|r][yshift] ] [ -Zvalue|file[+t|T] ] [ -aflags ] [ -bibinary ] [ -dinodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -lflags ] [ -pflags ] [ -qiflags ] [ -ttransp ] [ -wflags ] [ -:[i|o] ] [ --PAR=value ]

输入数据

table

一个或多个ASCII或二进制表数据。若不提供表数据,则会从标准输入中读取。

可选选项

-A
-A[x|y]

不使用本选项的默认情况下,地理坐标点之间会使用大圆弧连接。如果使用本选项则改为直接用直线相连。 笛卡尔坐标点无论是否使用本选项都直接用直线相连。 使用附加选项可以绘制阶梯曲线:

  • x :绘制阶梯曲线,先沿 x 方向,再沿 y 方向。

  • y :绘制阶梯曲线,先沿 y 方向,再沿 x 方向。

xy 的含义如下:

  • 对于笛卡尔投影,xy 分别为 X 轴和 Y 轴。

  • 对于地理投影,xy 分别为纬线和经线。

  • 对于极坐标投影,xy 分别为方位角和半径。

注意:在 plot3d 中,本选项要求 z 坐标固定不变。

-B
-Bparameters

设置底图边框和轴属性。 (参数详细介绍)

-C
-C[[section/]master_cpt[+h[hinge]][+u|Uunit]|local.cpt|color\(_1\),color\(_2\)[,color\(_3\),...]]

指定主 CPT 名称,CPT 文件或用逗号分割的多个颜色, 以创建一个 CPT。如果不指定参数,则在现代模式下使用当前 CPT(如果可用)。 支持以下多种输入:

  1. 主 CPT 名称,例如 earth (详见 内置CPT ), 可使用 CPT 名称 master 或包括相对路径的 section/master 来指定(内置 CPT 不可添加 .cpt 扩展名)。

  2. 自定义 CPT 文件 cpt ,例如 local.cpt

  3. 自动从多个颜色 color\(_1\),color\(_2\)[,color\(_3\),...] 中创建线性连续的 CPT,其中 z 值从 0 开始, 每添加一种颜色 z 值加 1。在这种情况下, color\(_i\) 可以是 r/g/b (e.g. 255/100/75), h-s-v (e.g. 180-0.8-1), c/m/y/k (e.g. 80/50/40/30),HTML十六进制 (e.g. #aabbcc) 或 颜色名称。逗号之间不能有空格。

支持以下选项:

  • +h - 对于有软铰链 (soft hinge) 的主 CPT,可指定 hinge 值启用铰链, 而对于有硬铰链 (harde hinge) 的 CPT,可以修改铰链位置 hinge ,但不能禁用。

  • +u - 对于任何其他主 CPT,可以通过指定其原始单位 unit 将其 z 值单位转换为米。

  • +U - 与 +u 类似,但是将 z 值单位从米转换为指定单位 unit

注意 - 对于 +u|U,必须从 e|f|k|M|n|u 中选择一种单位。

本选项可以使符号和多边形的填充颜色、线段和多边形的线条颜色由 Z 值决定。

  1. 若绘制符号(即使用 -S 选项),则符号的填充色由数据的第三列 Z 值决定, 其他数据列依次后移一列。

  2. 若绘制线段或多边形(即未使用 -S 选项),则需要在多段数据的数据段头记录中指定 -Zval (参见 数据段头记录中的额外属性 )。CPT文件中 val 所对应的颜色, 即为线段或多边形的颜色。

-D
-Ddx[/dy]

该选项会将符号或线段在给定坐标的基础上偏移 dx/dy 距离。 可以附加单位 c|i|p 。 若未指定 dy,则默认 dy = dx

-E
-E[x|y|X|Y][+a|A][+cl|f][+n][+wwidth[/cap]][+ppen]

绘制误差棒或箱线图(茎叶图)符号。不附带参数使用 -E 默认同时绘制 xy 误差棒,等效于 -Exy。 误差数据 x_errory_error 为 (x, y) 或 (x, y, z) 后面两列。 可以附带以下参数:

  • x - 在 x 方向绘制误差棒。误差数据 x_error 为 (x, y) 或 (x, y, z) 后面一列。

  • y - 在 y 方向绘制误差棒。误差数据 y_error 为 (x, y) 或 (x, y, z) 后面一列。

  • X - 在 x 方向绘制箱线图(茎叶图)符号。 x 坐标被视为中位数,(x, y) 或 (x, y, z) 后面四列数据为 \(0\%\) 分位数、\(25\%\) 分位数、\(75\%\) 分位数和 \(100\%\) 分位数。 可以使用 -G\(25\% \text{-} 75\%\) 的箱体进行填充。

  • Y - 在 y 方向绘制箱线图(茎叶图)符号。其余与 X 相同。

使用以下附加选项设置符号的外观:

  • +a - 绘制非对称误差棒 [默认是对称误差棒]。需要两个而非一个额外数据列,分别包含两个带符号的偏差值。

  • +A - 类似,但读取的是低限和高限值,而非带符号的偏差值。

  • +n - 绘制带缺口的箱线图符号,缺口宽度反映了中位数的不确定性。该符号需要第 5 个额外数据列来包含分布中的点数。

  • +w - 设置指示误差棒末端封顶线长度的宽度 (width) [默认为 7p]。 对于箱线图符号,它同时设置默认箱体宽度和触须封顶线长度 [默认为 7p]。 附加 width/cap 可为该类符号分别设置宽度和封顶线尺寸。

  • +p - 设置首选的误差棒画笔属性 pen [默认值:宽度 = 0.25p,颜色 = 黑色,样式 = 实线]。

  • +c - 和 -C 同时使用,由 Z 值决定颜色。 使用 +cf 只控制符号填充颜色, +cl 只控制误差棒画笔颜色。不带参数的 +c 同时控制两种颜色。

注意:一般情况下误差棒会放置在符号之后。但对于大型垂直和水平条形符号(-Sb|B),误差棒会绘制在顶部以避免下限被遮挡。

-F
-F[c|n|p][a|r|s|t|refpoint]

改变点的连接方式以及数据分组的方式。点的连接方式分为:

  • c 将每组数据中的点都依次相连 [默认]

  • n 将每组数据中的点都互相连接构成网

  • p 对每组数据设置新的参考点,从新参考点连接线段

数据分组的方式包括:

  • a 忽略所有段头信息,所有点属于同一个分组,将参考点设置为第一个文件的第一个点

  • r 每个数据段都作为一个单独的组,每个点都是下一个点的参考点(仅适用于 -Fp

  • sr 相同,但参考点设置为每个数据段的第一个点 [默认]

  • t 将每个文件中的所有数据视为一个单独的组,并将参考点设置为每个组的第一个点

可以将 refpoint 设置为 lon/lat (或 x/y )坐标替代 a|r|s|t,该点将作为所有组的固定外部参考点。

https://docs.generic-mapping-tools.org/latest/_images/GMT_segmentize.png

虚线表示原始输入数据,输入数据有两个文件 t1.txtt2.txt 。而实线是改变后的连接方式和分组方式。第一张图是原始输入数据,随后的五个图表示 -Fpa-Fpt-Fps-Fp10/35 和 -Fna 的效果。

-G
-Gfill|+g|+z

设置符号或多边形的填充颜色或图案 [默认不填充]。 本模块会在头段记录中搜索 -G-W 选项,并覆盖对应选项的设置。 如果头段记录中有 -Z 选项,使用 -G+z 通过 -Ccpt 和 Z 值来分配填充颜色(如果通过 -Z 设置了透明度,处理方式相同)。 如果 fill = auto[-segment] 或 auto-table,将循环使用由 COLOR_SET 定义的填充颜色,并按段或按表进行更改。任何 transparency 设置保持不变。

使用 +g 启用多边形的基于顶点的颜色渐变(使用 Gouraud 着色)。会自动检测输入数据格式,并支持以下三种格式:

  1. RGB 格式x y r g b,其中 RGB 值的范围为 0-255。

  2. 颜色名称格式x y colorname,其中 colorname 可以是颜色名字(如 "red"、"blue")、十六进制颜色(如 "#FF0000")、斜杠分隔的 RGB(如 "255/0/0")、H-S-V 或 C/M/Y/K 格式。

  3. CPT 格式x y z,其中 z 值通过 -C 指定的 CPT 映射为颜色。

支持具有任意数量顶点的多边形,并使用从第一个顶点开始的扇形三角剖分自动进行三角化。 每个顶点都有自己的颜色,Gouraud 着色会在多边形面上创建平滑的颜色渐变。使用 -W 为渐变多边形添加轮廓。

-H
-H[scale]

从数据中读取 scale 列,对每一条记录的符号大小和画笔宽度进行缩放。 scale 列为 zsize 列之后的第一个数据列。 也可以指定一个固定的 scale 数值进行统一缩放。

-I
-Iintens

使用提供的 intens 值(在 \(\pm 1\) 范围内),通过模拟光照来调节填充颜色 [默认无光照]。 如果未提供光照强度值,将从符号参数之后的第一个数据列中读取 intens

-J
-Jprojection

设置地图投影方式。 (参数详细介绍)

-L
-L[+b|d|D][+xl|r|x0][+yb|t|y0][+ppen]

将第一个和最后一个数据点连接起来,将多段数据解释为闭合多边形。不使用本选项,多段数据只会被解释为线段。 可以附加以下参数构建不同形式的多边形:

  • +d - 使用第 3 列额外数据中给出的偏差 \(dy(x)\),围绕 \(y(x)\) 构建对称包络。

  • +D - 使用第 3-4 列额外数据中的偏差 \(dy1(x)\)\(dy2(x)\),围绕 \(y(x)\) 构建非对称包络。

  • +b - 使用第 3-4 列额外数据中的上下限 \(yl(x)\)\(yh(x)\),围绕 \(y(x)\) 构建非对称包络。

  • +x - 将第一个点和最后一个点连接到锚点。锚点可以是 xmin(附加 l)、 xmax(附加 r)或 x0(附加该数值)。

  • +y - 将第一个点和最后一个点连接到锚点。锚点可以是 ymin(附加 b)、 ymax(附加 t)或 y0(附加该数值)。

  • +ppen - 绘制轮廓 [默认无轮廓]。

可以使用 -G 填充颜色或图案。

-M
-M[c|s][+lseclabel][+gfill][ppen][+rpen][+y[level]]

填充两条曲线 \(y_0(x)\)\(y_1(x)\) 之间的中间区域。 数据通过一对或多对独立的表文件提供,每对表具有相同数量的段(不同对之间的段数可以不同)。 因此,命令行中给出的偶数个表文件的顺序非常重要。可以使用以下两个附加参数:

  • c:表示 \(y_1(x)\)\(y_0(x)\) 协同配准,并在具有三列的任意数量的文件中作为第三列给出。每个文件可以包含任意数量的段。

  • s:与上述相同,但两条曲线通过独立的表对给出 [默认]。

可以进一步附加以下选项:

  • +g:当 \(y_0(x)\) 超过 \(y_1(x)\) 时,使用通过 -G 设置的 fill 填充该区域。对于相反的情况(即 \(y_1(x)\) 较大时),在此处附加另一个 fill

  • +l:为次级曲线附加图例标签。主曲线 \(y_0(x)\) 则通过 -l 设置图例标签。

  • +p:为曲线 \(y_1(x)\) 指定单独的画笔属性 [默认与 \(y_0(x)\) 的画笔相同]。曲线 \(y_0(x)\) 的画笔属性参见 -W

  • +r:在图例中仅绘制线条而非矩形填充框, pen 只有线条宽度的设置有效,线条颜色设置无效。图例线条颜色由 fill 控制。

  • +y:将数据与一条水平恒定线进行比较。附加该水平线的值后,系统将生成 \(y_1(x)\) 曲线,并将其与所有输入文件进行比较。

注意:必须根据所需结果,至少指定一种填充或一个画笔属性。

https://docs.generic-mapping-tools.org/latest/_images/GMT_fill_curves.png

使用本选项对曲线之间的区域进行涂色。会自动识别交点和 NaN 间隙,填充颜色取决于哪条曲线位于上方。图例可以设置为填充矩形,或者通过 +r 设置为线条。

-N
-N[c|r]

不裁剪地图边界之外的符号 [默认情况下,仅绘制坐标严格位于地图边界内的点]。

对于存在周期性的地图而言,若符号出现在重复边界上,则会被重复绘制两次。 这种情况可以通过以下参数选项修改:

  1. -N 关闭裁剪,符号仅绘制一次

  2. -Nr 关闭裁剪,但符号依然绘制两次

  3. -Nc 不关闭裁剪,但符号仅绘制一次

本选项也可以用于线或多边形,但请注意,这会导致不再考虑周期性(例如经度),并可能产生意想不到的后果。

-R
-Rxmin/xmax/ymin/ymax[+r][+uunit]

指定数据范围。 (参数详细介绍)

-U
-U[label][+c][+jjust][+odx/dy]

在图上绘制GMT时间戳logo。 (参数详细介绍)

-V
-V[level]

设置 verbose 等级 [w]。 (参数详细介绍)

-W
-W[pen][attr]

设置线段或符号轮廓的画笔属性 pen,详细介绍请参考 画笔线条属性。 默认值 width = 0.25p, color = black, style = solid。

附加参数 attr 可以设置为:

  • +c :使用 CPT 文件控制颜色(参见 -C)。 使用 +cl 则表示线条颜色由 CPT 文件控制。 使用 +cf 则符号的填充色由 CPT 文件控制。 如果未给出参数, +c 则表示线条颜色和符号填充色同时由 CPT 文件控制。

  • +o :附加 offset[unit],将从距离起点终点 offset 的位置开始和停止绘制线条。 unit 为单位。 如果线条的起点和终点有不同的偏移量, offset 改为 b_offset/e_offset

  • +s :使用 Bezier 样条线绘制线条 [默认使用线性样条]。

  • +v :使用 +v[b|e]vspecs,在线条末端放置矢量箭头。可以单独指定 b(起点)或 e(终点)仅在其中一端添加矢量 [默认两端都添加]。 注意 :由于 +v 可能带有额外的附带参数,因此必须放在选项参数的末尾。详细介绍请参考 矢量/箭头线条属性

  • +z :如果设置了 -Z,则通过 -Ccptz 值分配画笔颜色(如果通过 -Z 设置了透明度,处理方式相同)。 如果画笔属性 pen 里面的 color = auto[-segment] 或 auto-table,则循环使用由 COLOR_SET 隐含的画笔颜色,并按段或按表进行更改。 widthstyletransparency 设置保持不变。

-X
-Y

-X[a|c|f|r][xshift[u]]

-Y[a|c|f|r][yshift[u]]

移动绘图原点。 (参数详细介绍)

-Z
-Zvalue|file[+t|T]

通过 Z 值控制线条和多边形的颜色和/或透明度。可以选择以下两种模式之一:

  1. 附加一个值 value,并通过 CPT 查找相应的颜色。

  2. 给出一个文件名 file,其中包含输入数据中每个多边形或线条的 Z 值(从最后一列读取)。

控制颜色需要和 -Ccpt-G-W 一起使用:

  • -G+z - 控制多边形填充颜色

  • -W+z - 控制线条颜色

以下两个附加参数可用于处理透明度和/或颜色:

  • +t - 改为控制多边形或线条的透明度。Z 值将被假定为 \(0\text{-}100\%\) 范围内的透明度。

  • +T - 通过 file 提供两列数据:最后一列必须是 Z 值,而倒数第二列为透明度(范围为 \(0\text{-}100\%\))。

-a
-a[[col=]name][,...]

控制输入或输出为 OGR/GMT 格式时对非空间元数据的处理方式。 (参数详细介绍)

-bi
-bi[ncols][type][w][+l|b]

控制二进制文件的输入格式。 (参数详细介绍)

-di
-dinodata

将输入数据某些特定值当作NaN。 (参数详细介绍)

-e
-e[~]"pattern" | -e[~]/regexp/[i]

筛选或剔除匹配指定模式的数据记录。 (参数详细介绍)

-f
-f[i|o]colinfo

显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)

-g
-g[a]x|y|d|X|Y|D|[col]zgap[+n|p]

确定数据或线段的间断。 (参数详细介绍)

如果使用了 -S 选项则本选项无效。

-h
-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle]

在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)

-i
-icols[+l][+sscale][+ooffset][,...][,t[word]]

对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-l
-l[label][+Dpen][+Ggap][+Hheader][+L[code/]txt][+Ncols][+Ssize[/height]][+V[pen]][+ffont][+gfill][+jjust][+ooff][+ppen][+sscale][+wwidth]

为当前绘制的符号或线段增加一个自动图例记录。 (参数详细介绍)

-qi
-qi[~]rows[+ccol][+a|f|s]

筛选输入的行或数据范围。 (参数详细介绍)

-p
-p[x|y|z]azim[/elev[/zlevel]][+wlon0/lat0[/z0]][+vx0/y0]

设置3D透视视角。 (参数详细介绍)

-t
-t[transp]

设置图层透明度(百分比)。取值范围为0(不透明)到100(全透明)。 (参数详细介绍)

-w
-wy|a|w|d|h|m|s|cperiod[/phase][+ccol]

将输入坐标转换为循环坐标。 (参数详细介绍)

-:
-:[i|o]

交换输入或输出数据的前两列。 (参数详细介绍)

-^-

显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -

-++

显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明

--PAR=value

临时修改GMT参数的值,可重复多次使用。参数列表见 配置参数

-S

-S 选项

使用 -S 选项,则表示要绘制符号。 -S 选项的基本语法是:

-S[symbol][size]

其中 symbol 指定了符号类型, size 为符号的大小,后面可添加单位。

不同的符号类型,需要的输入数据格式也不同,但可以统一写成(用 ... 代表某符号 特有的输入列):

X   Y   ...

基本符号

-S-|+|a|c|d|g|h|i|n|s|t|x|y|p

14种简单的基本符号只需要一个参数 size

https://docs.generic-mapping-tools.org/latest/_images/GMT_base_symbols1.png

14种简单的基本符号,细圆圈表示相同 size 的外接圆。

  • -S-size :短横线

  • -S+size :加号

  • -Sasize :五角星

  • -Scsize :圆

  • -Sdsize :菱形

  • -Sgsize :八边形

  • -Shsize :六边形

  • -Sisize :倒三角

  • -Snsize :五边形

  • -Spsize :点

  • -Sssize :正方形

  • -Stsize :三角形

  • -Sxsize :叉号

  • -Sysize :短竖线

对于大写符号 ACDGHINSTsize 表示符号的面积与直径为 size 的圆的面积相同。 4种符号 -|+|x|y 是线符号, 可以使用 -W 选项控制线宽, -G-C 选项控制颜色(本例中为 -Glightblue -W1p )。 而其他符号 -W 选项控制轮廓线属性, -G-C 选项控制填充色。

复杂符号

5种复杂符号需要两个或更多的参数,还可以添加附加选项实现更多显示效果

https://docs.generic-mapping-tools.org/latest/_images/GMT_base_symbols2.png

5种多参数符号。大写形式 E, J, W 与小写形式 e, j, w 的区别在于大写形式使用地理方位角与地理距离。

-Se[direction/]major_axis[/minor_axis]

绘制椭圆。三个参数分别为方向、长轴长度、短轴长度。其中方向是相对于水平方向逆时针旋转的角度,两个轴的长度都使用长度单位,即 c|i|p

这三个参数也可以在选项中省略,在输入数据中为每个椭圆单独指定。此时输入数据的格式为:

X   Y   方向   长轴长度    短轴长度

这个选项绘制的椭圆形状大小不会受到底图地理投影方式的影响。

-SE[azimuth/]major_axis[/minor_axis]

绘制椭圆。与前者类似,区别在于:

  • 使用方位角(相对于正北方向顺时针旋转的度数)。该方位角会根据所选取的地图投影变换成角度

  • 对于线性投影,长短轴的长度单位为数据单位,即与 -R 中数据范围的单位相同

  • 对于地理投影,长短轴的长度单位必须设置为地理距离单位(例如千米 k 、弧度 d

如果想使用地理单位绘制一个圆形,可以简单使用 -SE- 。此时输入数据只需要一个参数即该圆的直径。

-Sj[direction/]width[/height]

绘制旋转矩形。三个参数分别为方向、宽度、高度。其中方向是相对于水平方向逆时针旋转的角度。 这三个参数也可以在选项中省略,在输入数据中为每个矩形单独指定。此时输入数据的格式为:

X   Y   方向   宽度    高度
-SJ[azimuth/]width[/height]

绘制旋转矩形。与前者类似,区别在于:

  • 使用方位角(相对于正北方向顺时针旋转的度数)。该方位角会根据所选取的地图投影变换成角度

  • 对于线性投影,长短轴的长度单位为数据单位,即与 -R 中数据范围的单位相同

  • 对于地理投影,长短轴的长度单位必须设置为地理距离单位(例如千米 k 、弧度 d

如果想使用地理单位绘制一个正方形,可以简单使用 -SJ- 。此时输入数据只需要一个参数即边长。

-Srwidth/height

绘制矩形。与 -Sj 类似,区别在于只需要两个参数,不进行旋转。

如果使用 -Sr+s ,则输入数据分别为矩形的两个对角顶点的X和Y坐标。例如:

echo 139.2 34.8 140.5 36 | gmt plot -Sr+s -W1p,blue
-SRwidth/height/radius

绘制圆角矩形。 radius 为圆角半径。

-Sw[outer[/startdir/stopdir]][+a[dr]][+i[inner]][+ppen][+r[da]]

绘制楔形图。需要的3个参数分别为外直径 outer ,起始角度 startdir 和结束角度 stopdir (相对于水平方向逆时针旋转的角度)。 附加 +i 可以进一步指定内直径 inner (默认为0)。附加 +a[dr] 表示只绘制弧线。如果附加了 dr ,则以 dr 为径向间隔绘制弧线。 附加 +r[da] 表示只绘制径向线。如果附加了 da ,则以 da 为弧向间隔绘制径向线。

-SW[outer[/startaz/stopaz]][+a[dr]][+i[inner]][+ppen][+r[da]]

绘制楔形图。与前者类似,区别在于使用起始方位角 startaz 和结束方位角 stopaz (相对于正北方向顺时针旋转的度数), 以及内直径和外直径都使用地理距离(默认为km)。

条状符号

https://docs.generic-mapping-tools.org/latest/_images/GMT_base_symbols4.png
-Sb[size[c|i|p|q]][+b|B[base]][+v|iny][+s[gap]]

绘制垂直条状符号,从 base 到坐标Y。 size 为宽度,可以使用 c|i|p 这样的长度单位,也可以使用 q 表示X方向单位。 默认情况下 base = 0,附加 +b[base] 可以修改。如果只附加 +b 但没有设置 base ,则需要额外的最后一列数据来指定 base 的值。 使用 +B[base] ,条状符号的高度将从 base 起算(默认从原点起算)。

普通条状符号只需要一列Y值输入数据。如果想绘制多波段条状符号,需要附加 +v|iny ,其中 ny 表示波段数量。输入数据中也需要有 ny 列Y值。 这里 +i 表示以 dy 为步长累加条状的值, +v 表示按递增顺序获得相对于 base 的完整值。

默认情况下多个波段都绘制在一个条状符号上,附加 +s 让多波段绘制为相邻的多个条状符号。 可选参数 gap 表示在相邻条状符号之间添加间隔,间隔宽度为 size 的百分比 gap 。此时 size 定义为多个条状符号加间隔的总宽度。

绘制多波段条状符号需要使用CPT文件以及 -C 选项指定颜色,其中CPT文件的取值范围必须是 0, 1, ..., nx - 1。 输入数据的格式为(x1 y x2 ... xn)或(dx1 y dx2 ... dxn)。

-SB[size[c|i|p|q]][+b|B[base]][+v|inx][+s[gap]]

与前者类似,区别在于绘制的是水平条状符号。

矢量符号

矢量符号需要长度和方向,或矢量终点坐标等参数。通过附加选项可以定制矢量头的样式。关于矢量绘制的详细说明请参考 矢量/箭头

-Smsize[+vecmodifiers]

绘制数学圆弧,输入数据的格式为:

X  Y  radius  start  stop

其中 radius 为圆弧半径, startstop 定义为水平方向起始的逆时针角度。 默认圆弧两端无矢量头,可以通过附加选项 +vecmodifiers 添加,见 矢量/箭头 一节。 size 定义为矢量头的长度。 圆弧的线宽由 -W 选项设定,矢量头的轮廓线宽默认为圆弧线宽的一半。

-SMsize[+vecmodifiers]

与前者类似,唯一的区别为当圆弧的夹角恰好是90度时会用直角符号来表示。

#!/usr/bin/env bash
gmt begin plot_-Sm
gmt basemap -R0/4/0.5/1.5 -JX6c/3c -Bxa1g1 -Bya0.5g0.5 -BWSen
gmt plot -Sc0.15c -Gblack << EOF
1 1
3 1
EOF
gmt plot -Sm0.2c+b+e+g -Gblack -W0.5p,red << EOF
1 1 1 10 60
EOF
gmt plot -SM0.2c+b+l -Gblack -W0.5p,blue << EOF
3 1 1 10 100
EOF
gmt end show
../../_images/6f0950d2fe5fae361eb420a45f49986b.png

plot -Sm|M 示意图

-Svsize[+vecmodifiers]

绘制矢量,输入数据格式为:

X   Y   direction   length

其中 direction 定义为水平方向起始的逆时针角度, length 为矢量长度, size 为矢量头的长度。 矢量杆的宽度颜色等属性由 -W 控制,矢量头的轮廓线宽默认为其一半。 更多矢量头的属性可以通过 +vecmodifiers 添加,见 矢量/箭头 一节。

-SVsize[+vecmodifiers]

与前者类似,唯一的区别为第三列是方位角而不是方向,即以正北为起点顺时针旋转的角度。

-S=size[+vecmodifiers]

绘制地理矢量,区别在于第三列是方位角(即以正北为起点顺时针旋转的角度),第四列长度的单位是地理单位(默认为km)。

https://docs.generic-mapping-tools.org/latest/_images/GMT_base_symbols5.png

自定义符号

-S[kname[/size]]

绘制自定义的符号。目前,GMT 官方内置了 40 个自定义符号,如下所示:

https://docs.generic-mapping-tools.org/latest/_images/GMT_App_N_1.png

如果这些内置自定义符号无法满足需求(例如没有常用的指北针),用户可以自行制作自定义符号文件并使用。详细使用方法见制作和使用自定义符号

带修饰物的线条

第一种类型的带修饰物线条,通常用于绘制气象锋面、断层线等。线条修饰物由附加选项控制,线条属性由 -W 选项控制。

#!/usr/bin/env bash
#
# Plot front symbols for use on man page

gmt begin GMT_base_symbols7
cat << EOF > t.txt
0	0
10	20
EOF
    # Centered symbols using fixed interval, then same with just 1 centered symbol
    gmt plot -R-2/12/-10/30 -JX1i -W1p -Glightblue -Sf0.4i/0.07i+b t.txt
    gmt plot -W1p -Glightred -Sf0.4i/0.1i+c+r -X0.6i t.txt
    gmt plot -W1p -Gred -Sf0.4i/0.1i+f -X0.6i t.txt
    gmt plot -W1p -Sf0.4i/0.2i+S+r -X0.6i t.txt
    gmt plot -W1p -Gblack -Sf0.2i/0.05i+t+l -X0.6i t.txt
    gmt plot -W1p -Gred -Sf-1/0.1i+b -X0.6i t.txt
    gmt plot -W1p -Gred -Sf-1/0.1i+c -X0.6i t.txt
    gmt plot -W1p -Gred -Sf-1/0.1i+f -X0.6i t.txt
    gmt plot -W1p -Sf-1/0.4i+S+l -X0.6i t.txt
    gmt plot -W1p -Glightorange -Sf-1/0.1i+t -X0.6i t.txt
    gmt plot -W1p -Glightgreen -Sf-1/0.1i+v -X0.6i t.txt
gmt end show
../../_images/bb4e31f34398b31b2a0776dd54eb0aa1.png

-Sf[±]gap[/size][+l|+r][+b|c|f|s[angle]|t|v][+ooffset][+p[pen]]

  • gap 线段上符号之间的距离,若为负值,则解释为线段上符号的个数。

  • size 为符号大小

    • 若省略了 size ,则默认为 gap 的30%

    • gap 为负值,则 size 不可省略

  • +l+r 分别表示将符号画在线段的左侧还是右侧,默认是绘制在线段中间

  • +b 符号为box

  • +c 符号为circle

  • +t 符号为triangle

  • +f 符号表示断层(fault),默认值。

  • +s 符号表示断层的滑动(slip),用于表示左旋或右旋断层。 可选的参数 angle 控制绘制矢量时的角度(默认为20)。 用 +S 绘制一个弧形箭头。

  • +ooffset 将线段上的第一个符号相对于线段的起点偏离 offset 距离,默认值为0

  • 默认符号的线属性与线段相同( -W 选项),可以使用 +ppen 为符号单独指定线属性。 使用 +p 则不绘制符号的轮廓。

  • +i 将隐藏线段只绘制符号。

第二种类型的带修饰物线条是带标注文字的线段,常用于绘制断层名的断层线。

#!/usr/bin/env bash
#
# Plot plot quoted line symbols for use on man page

gmt begin GMT_base_symbols8
    gmt math -T0/360/1 T 5 MUL COSD 8 MUL = t.txt
    # Just a cosine with line-following constant text a few times
    gmt plot -R0/360/-10/10 -JM6i -W2.5p,6_4:0 -Sqn4:+l"wiggly line"+v+f12p,Times-Roman,red t.txt --PS_LINE_CAP=round
gmt end show
../../_images/224b88fcdec5ff978445453891d95cff.png
-Sqd|D|f|l|L|n|N|s|S|x|Xposinfo[:labelinfo]

有6种可选的方式控制标注文字:

ddist[c|i|p][/frac]

Ddist[d|e|f|k|m|M|n|s][/frac]

小写 d 指定标注之间的距离 dist ,单位为 c (cm), i (inch), p (points)。 默认值为 10c

大写 D 指定标注之间的地理距离 dist ,单位为 e (m), f (foot), k (km), M (mile), n (nautical mile), u (US survey foot), d (arc degree 弧度), m (arc minute 弧分), s (arc second 弧秒)。

可选选项 frac 表示将第一个标注放在距离线段起点 frac * dist 处,默认值为0.25。

ffile.txt[/slop[c|i|p]]

读取 ASCII 文本文件 file.txt,将标注放置在文件中指定的坐标位置。 坐标位置和线段间的距离小于 slop 才会绘制标志文字。默认值为0即只绘制位于线段上的坐标。

l|Lline1[,line2,...]

每个 line 的格式为 start_lon/start_lat/stop_lon/stop_lat ,标注文字会绘制在这些 line 与线段的交点。 小写的 l 表示直线,而大写的 L 表示使用大圆路径。

n|Nn_label[/min_dist[c|i|p]]

指定线段上等间隔标注的个数,默认为1即只绘制一个标注。 小写的 n 表示标注位置在每段间隔的中心,而大写的 N 表示标注位置在每段间隔的起点。

可选选项 /min_dist[c|i|p] 指定相邻标注的最小距离。 该选项同时限制了只能在长度大于 min_dist 的线段上进行标注。

s|Sn_label[/min_dist[c|i|p]]

n|Nn_label 相同,但输入数据会被解释为一系列的两点线段。

x|Xxfile.txt

读取 ASCII 文本格式的多段数据文件 xfile.txt ,标签文字会绘制在这些多段数据与线段的交点。 大写的 X 会先将输入数据重采样为大圆弧线。 添加可选选项 +rradius[c|i|p] 可以设置 x-y 平面上标注文字之间的最小间距。

可选选项 labelinfo 用于控制文字的格式,其可以是下面子选项的任意组合:

+aangle

设置文字相对于线段的角度。可以设置为 +an 表示文字垂直于线段。默认为 +ap 表示文字与线段平行。

+cdx[/dy]

设置文字与文本框之间的边距。可以添加单位 c|i|p 或百分号 % 表示边距相对字体大小的百分比,默认为15%。

+ffont

设置字体属性,默认为9p。

+g[color]

绘制一个不透明的文本框背景。

+i

不绘制线段,只绘制标注文字。

+llabel

手动设置固定的标注文字。

+Lh

从数据头段中读取标注文字。

+Ld

采用笛卡尔坐标系内的距离作为标注内容,在后面附加 c|i|p 之一指定单位。

+LD

采用实际的地理距离作为标注内容,在后面附加 d|e|f|k|n|M|n|s 之一指定单位,默认为弧度 d

+Lf

ffile.txt 的第二列之后读取所有文字作为标注内容(不包括第二列)。

+Lx

x|Xxfile.txt 文件头段中读取标注文字。

+ndx[/dy]

偏移标注文字的位置,可以使用单位 c|i|p 。不能与 +v 一起使用。

+o

使用圆角矩形文本框。不能与 +v 一起使用。

+p[pen]

设置文本框轮廓线型。

+rmin_rad

当线段的曲率半径小于 min_rad 不绘制文字。

+t[file]

将每个标注文字的 x, y, angle, text 保存进文件 file [Line_labels.txt]。

+uunit

在所有标注后面附加 unit 作为单位。 unit 可以是一个用双引号括起来的任意字符串。

+v

标注文字沿着线段弯曲。

+=prefix

在所有标注前面添加前缀 prefix

标注文字的控制示例可以参考 -Sq 选项示例

输入数据格式

-S 选项决定了输入数据需要哪些数据列,如果在选项中未给出参数 size ,则数据中需要 size 列。 此外,使用 -H-I-t 选项都需要给出各自的数据列。 无论选项顺序如何,数据列的顺序都是固定的:

x y [z] [size] [scale] [intens] [transp [transp2]] [trailing-text]

其中括号中的项是可选的,并受所述选项控制:

  • -C 选项需要 z 列。

  • -S 选项不指定参数则需要 size 列。取决于选定的符号,可能需要不止一列。

  • -H 选项不指定参数则需要 scale 列。

  • -I 选项不指定参数则需要 intens 列。

  • -t 选项不指定参数则需要 transp 列。

  • 尾随文本 trailing-text 总是可选的。

:(1) 如果 -S 未指定具体的符号类型 symbol ,则 symbol 应位于尾随文本 trailing-text 的开头。 (2) 可以使用 -i 重新排列数据记录以匹配预期的格式。

制作和使用自定义符号

如果 GMT 内置的自定义符号无法满足用户的需求,用户可以根据 GMT 自定义符号文件 的格式要求自行制作自定义符号文件。或者参考中文手册中的 指北针符号示例

使用自定义符号时,GMT 会依次按照如下顺序去搜索自定义符号的定义文件 name.def

  1. 当前目录,即运行脚本所在目录

  2. ~/.gmt/custom 目录(Linux/macOS/WSL 用户)或 C:\Users\你的当前用户名\.gmt\custom 目录(Windows用户)

  3. $GMT_SHAREDIR/custom 目录

用户可以将自己制作的自定义符号复制到以上任一路径即可正常使用。 建议放在 ~/.gmt/custom 目录(Linux/macOS/WSL 用户)或 C:\Users\你的当前用户名\.gmt\custom 目录(Windows 用户)下。

多段数据

对于多段数据而言,每段数据的头段记录中都可以包含一些选项,以使得不同段数据拥有 不同的属性。头段记录中的选项会覆盖命令中选项的参数:

  • -Gfill :设置当前段数据的填充色 fill

  • -G- :对当前数据段关闭填充

  • -G :恢复到默认填充色

  • -Llabel :设置当前段数据的标签,常用于断层名标注

  • -Wpen :设置当前段数据的画笔属性 pen

  • -W :恢复到默认画笔属性 MAP_DEFAULT_PEN

  • -W- :不绘制轮廓

  • -Zzval :从 cpt 文件中查找 Z 值 zval 所对应的颜色作为填充色

  • -ZNaN :从 cpt 文件中获取 NaN 颜色

  • -ttransparency :设置透明度

详情及示例参见 数据段头记录中的额外属性

距离单位

GMT支持多种不同的距离单位,以及三种不同的球面距离计算方式。 详情见 单位-j 选项

自动图例

本模块允许使用 -l 选项来指定一个自动图例条目。该选项仅适用于线条或符号。 如果符号大小是可变的,并且是根据其他信息计算得出的,那么需要通过 +S 修饰符提供一个具有代表性的图例尺寸。

基础示例

请参考入门教程中的 绘制符号

-Sq 选项示例

对于用法较为复杂的 -Sq 选项,可以通过以下三个示例帮助理解学习。 示例中用到的数据文件 @App_O_transect.txt 是 GMT 远程数据服务器自带数据, 该数据为地球大地水准面最值点之间的大圆弧路径,并且沿着该大圆弧从 ETOPO5 数据集中提取了高程数据。 数据格式为 经度、纬度、距离、大地水准面、高程

第一个示例沿大圆弧距离放置标注和不透明文本框。

#!/usr/bin/env bash
gmt begin plot_-Sq_1
    gmt coast -R50/160/-15/15 -JM5.3i -Gburlywood -Sazure -A500 -B20f10 -BWSne
    # -SqD1000k 大圆弧每1000km放置一个标注
    # +g 绘制一个不透明的文本框背景
    # +LD 使用距离值作为标注的内容,单位和 -SqD 的单位保持一致
    # +an 标注文字的方向与大圆弧垂直
    # +p 添加文本框的轮廓线
    gmt plot -SqD1000k:+g+LD+an+p -Wthick @App_O_transect.txt
gmt end show
../../_images/b75feb31bf532a6cb1c513a09e4acad9.png

第二个示例沿大圆弧距离放置标注和反色圆角矩形文本框。

#!/usr/bin/env bash
gmt begin plot_-Sq_2
    gmt coast -R50/160/-15/15 -JM5.3i -Gburlywood -Sazure -A500 -B20f10 -BWSne
    # -SqD15d 大圆弧每15弧度放置一个标注
    # +gblack 文本框背景黑色,+fwhite 标注文字白色
    # +o 使用圆角矩形文本框
    # +u@. 添加度单位。详细可以参考 基础知识 -> 转义序列 章节了解如何输出度符号
    gmt plot -SqD15d:+gblack+fwhite+LD+o+u@. -Wthick @App_O_transect.txt
gmt end show
../../_images/b37a5a8e7b953528548663715595620c.png

第三个示例采用沿大圆弧的海底地形数据作为标注的内容,按照沿大圆弧的距离,每1500km放置一个标注。 因此需要使用 gawk 程序从 @App_O_transect.txt 文件中抽取距离为1500km倍数的记录,并创建一个新文件,指定标注的位置和内容。

#!/usr/bin/env bash
gmt begin plot_-Sq_3
    gmt coast -R50/160/-15/15 -JM5.3i -Gburlywood -Sazure -A500 -B20f10 -BWSne
    # -i0,1,4 提取数据文件中的第1,2,5列
    # -Em150 每150行提取一个数据。原数据的测线为每 10km 一个测点,这项的意思即为每 1500km 提取一个数据
    # 提取出的第1,2,5列通过管道传送给 gawk 时,就变成了第1,2,3列。
    # int($3) 将第三列数据取整
    gmt convert -i0,1,4 -Em150 @App_O_transect.txt | gawk '{print $1,$2,int($3)}' > fix2.txt
    # -Sqffix2.txt 读取 fix2.txt 前两列作为标注文字的坐标
    # +Lf 从 fix2.txt 第二列之后读取所有文字作为标注内容
    gmt plot -Sqffix2.txt:+g+an+p+Lf+u" m"+f8p -Wthick @App_O_transect.txt
gmt end show
../../_images/b3ae96553a78582522e267cd0559e233.png

-L 选项示例

-L 选项常常和 -G 选项同时使用以进行颜色填充。下面看不同搭配的画图效果:

#!/usr/bin/env bash
cat << EOF > t.txt
1 1
2 3
3 2
4 4
EOF
cmd='t.txt -R0/5/0/5 -JX4c -W1p -Ba1f1'
gmt begin plot_-L_1
gmt plot $cmd -BWStr+t'No -G or -L'
gmt plot $cmd -BWStr+t'-G Only' -Gorange -X5c
# -L选项中的+p子选项对画笔的外观设置一律无效
# 没有-G选项时,使用-L选项必须使用+p子选项,但相关设置无效
gmt plot $cmd -BWStr+t'-L Only' -L+p10p,blue -X5c
gmt plot $cmd -BWStr+t'both -G and -L' -Gorange -L+p10p,blue -X5c
gmt end show
rm t.txt
../../_images/0a24074e6a0e0af45ec85b047e8c119e.png

-L 和 -G 选项不同搭配方式的效果

下面的例子分别绘制了上述三种情形。第一幅图使用 +d 选项,数据的第三列分别是2、2、3和1, 所以包络的上下范围在线条的每一个数据点处距离线条的距离就是2、2、3和1。 第二幅图使用 +D 选项,数据的第三列分别是2、2、3和1, 所以包络的下范围在线条的每一个数据点处距离线条的距离就是2、2、3和1, 也就是和第一幅图完全相同。但是,上范围的距离使用的是数据文件的第四列,也就是4、3、2和1。 第三幅图使用 +b 选项,包络的范围与线条的位置无关。第三、四列数据分别决定了包络的上下范围。 当第三、四列数据交叉的时候,包络图形随之出现打结的现象。

#!/usr/bin/env bash
cat << EOF > t.txt
1 1 2 4
2 3 2 3
3 2 3 2
4 4 1 1
EOF
cmd='t.txt -R0/5/-2/8 -JX5c -W2p -Ba1f1 -Glightred'
gmt begin plot_-L_2
gmt plot $cmd -BWStr+t"-L\053d" -L+d
gmt plot $cmd -BWStr+t"-L\053D" -L+D -X6c
gmt plot $cmd -BWStr+t"-L\053b" -L+b -X6c
gmt end show
rm t.txt
../../_images/46d7ac73b3c80678e1868fed2901182c.png

围绕线条的包络

使用 +x+y 例子如下:

#!/usr/bin/env bash
cat << EOF > t.txt
1 1
2 3
3 2
4 4
EOF
cmd='t.txt -R0/5/0/5 -JX5c -W2p -Ba1f1 -Glightred'
gmt begin plot_-L_3
gmt plot $cmd -BWStr+t"-L\053xl" -L+xl
gmt plot $cmd -BWStr+t"-L\053xr" -L+xr -X6c
gmt plot $cmd -BWStr+t"-L\053x4.5" -L+x4.5 -X6c
gmt plot $cmd -BWStr+t"-L\053yt" -L+yt -X-12c -Y6.5c
gmt plot $cmd -BWStr+t"-L\053yb" -L+yb -X6c
gmt plot $cmd -BWStr+t"-L\053y4" -L+y4 -X6c
gmt end show
rm t.txt
../../_images/fd225c9af745936c036cbc3acf386917.png

到指定位置的包络