---
author: 田冬冬
date: 2026-01-23
---

# 绘制符号

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

## 符号一览

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

:::{figure} https://docs.generic-mapping-tools.org/latest/_images/GMT_base_symbols1.png
:align: center
:width: 80%
:::

## 绘制简单符号

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

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

```{eval-rst}
.. gmtplot:: symbols-1.sh
    :width: 60%
```

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

```{eval-rst}
.. gmtplot:: symbols-2.sh
    :width: 60%
```

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

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

## 大小变化的符号

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

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

```{eval-rst}
.. gmtplot:: symbols-3.sh
    :width: 60%
```

## 颜色变化的符号

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

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

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

```{eval-rst}
.. gmtplot:: symbols-4.sh
    :width: 60%
```

## 绘制不同的符号

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

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

```{eval-rst}
.. gmtplot:: symbols-5.sh
    :width: 60%
```

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

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

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

```
X   Y   Z   size    symbol
```

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

```{eval-rst}
.. gmtplot:: symbols-6.sh
    :width: 60%
```
