绘制符号

绘制各种类型的符号也是常见的绘图需求之一。GMT 支持绘制十几种常见的符号类型,还支持自定义复杂的符号类型,足以满足日常的科研绘图需求。这一节将介绍如何使用 plot 模块绘制多样的符号。

符号一览

plot 模块绘制符号需要使用 -S 选项。-S 选项后面紧跟着符号类型代码,以及符号大小。GMT 中常见的十几种简单符号及其对应的符号类型代码如下图所示。比如 c 代表圆(circle),t 代表三角形(triangle)。

Source Code

../../_images/9049ccd550ceaff32c8d392347fc9fdd.png

绘制简单符号

以绘制圆圈为例,通过查询文档或者看上图可知,圆圈对应的符号类型代码为 c-Sc0.5c 则表示绘制直径为 0.5 厘米的圆圈。为了绘制圆圈,我们需要给定圆圈的位置,因而输入数据中需要提供圆圈的 X 和 Y 坐标。

下面的示例中在 (2,3)、(5,6)、(8,2) 三个点绘制了三个直径为 0.5 厘米的圆圈。

gmt begin symbols
gmt plot -R0/10/0/10 -JX10c/10c -Baf -Sc0.5c << EOF
2 3
5 6
8 2
EOF
gmt end show
../../_images/3333d37803798ec6602aaf95436ed27a.png

与绘制线段和多边形类似,我们可以使用 -W 选项控制符号轮廓的画笔属性,使用 -G 选项为符号设置填充色。下面的命令就绘制了三个黑边红色圆圈。

gmt begin symbols
gmt plot -R0/10/0/10 -JX10c/10c -Baf -Sc0.5c -W1p,black -Gred << EOF
2 3
5 6
8 2
EOF
gmt end show
../../_images/b77a195b733987d50502a948bf215089.png

若想要绘制其它符号,则只需要使用对应的符号类型代码即可。例如,将 -Sc0.5c 改成 -St0.5c 则会绘制三角形。

当然,某些符号类型可能需要额外的输入数据。比如 -Sr 表示绘制长方形,此时输入数据中除了需要长方形的 X 和 Y 坐标之外,还需要长方形的宽和高,因而输入数据需要四列。对于这些输入数据稍复杂的符号,可以阅读文档以了解其输入数据的格式。

大小变化的符号

若想要绘制大小变化的符号,则需要在输入数据中额外加上一列以控制每个符号的大小,同时,在 -S 选项中则不再需要指定符号大小。

下面的示例中,-Sc 中没有指定圆圈大小,此时输入数据的第三列控制圆圈大小。由此,我们即得到了大小变化的符号。

gmt begin symbols
gmt plot -R0/10/0/10 -JX10c/10c -Baf -Sc -W1p,black -Gred << EOF
2 3 0.3
5 6 0.8
8 2 0.5
EOF
gmt end show
../../_images/356a8e78562588073654462a073f6624.png

颜色变化的符号

前面提到,使用 -G 选项可以为符号填充颜色,但其只能同时为所有符号指定单一的颜色。如果想要让符号的颜色根据某个数值的不同而使用不同的颜色,则需要使用 -C 选项。 -C 选项表示符号的填充色由某个数值以及 CPT 颜色表所控制。CPT 颜色表给出了数值与颜色之间的对应关系。因而对于任意一个符号,我们都可以给其一个数值,GMT 会根据该数值从 CPT 颜色表中找到对应的颜色作为该符号的填充色。因而,在输入数据中,我们需要在 X 和 Y 坐标的基础上额外加一列 Z 值,用于控制符号的填充色。

下面的示例中,我们首先使用 makecpt 模块,以 GMT 内置 CPT 颜色表 hot 为基础,生成了一个新的 CPT 颜色表。关于 CPT 颜色表的具体细节在后面会介绍到。此处,读者只需要知道,我们制作了一个 CPT 文件供后面的命令使用。该 CPT 颜色表为 0 到 3 之内的每个数值都对应了一个颜色。

同时,对于输入数据,我们额外增加一列(通常称这一列为 Z 值),该列的值决定了符号的填充色。

gmt begin symbols
gmt makecpt -Chot -T0/3/1
gmt plot -R0/10/0/10 -JX10c/10c -Baf -Sc0.5c -W1p,black -C << EOF
2   3   0
5   6   1
8   2   2
EOF
gmt end show
../../_images/dd905fc37a19c6e655eb03742ebba900.png

绘制不同的符号

前面说到,-S 选项中指定不同的符号类型代码则代表绘制不同的符号,但每次只能指定一种符号类型代码。如果想要不同的数据使用不同的符号绘制,则可以只指定符号大小而不指定符号类型代码,并在输入数据的最后一列指定符号类型代码。

下面的示例中,我们使用 -S0.5c 指定了符号的大小,但是没有指定符号类型。输入数据的最后一列中 cti 则分别为三个数据指定了各自的符号类型。

gmt begin symbols
gmt basemap -R0/10/0/10 -JX10c/10c -Baf
gmt plot -S0.5c -W1p,black -Gred << EOF
2 3 c
5 6 t
8 2 i
EOF
gmt end show
../../_images/dee5b7d3bb2088ea8b4790e6eb1211c6.png

大小、颜色和符号类型都变化的符号

前面介绍了如何绘制大小变化或颜色变化或符号类型变化的符号。那么如何实现颜色、大小以及符号三者都变化的符号呢?可以使用 -S 但不指定符号类型以及符号大小,同时使用 -C 选项。

关键问题在于,此时的数据数据格式是怎样的。根据 GMT 的规定,此时输入数据的格式为:

X   Y   Z   size    symbol

即第三列控制符号填充色,第四列为符号大小,最后一列为符号类型代码。

gmt begin symbols
gmt makecpt -Chot -T0/3/1
gmt plot -R0/10/0/10 -JX10c/10c -Baf -S -W1p,black -C << EOF
2   3   0   0.3 c
5   6   1   0.8 t
8   2   2   0.5 i
EOF
gmt end show
../../_images/ab474bd308696a3364a6783e277e553c.png