---
author: 田冬冬, 赵志远, 周茂
date: 2024-09-04
---

# 理解图层

在前面几节中，我们已经学会了如何使用 GMT 绘制底图、海岸线、线段、符号、文字、
地形起伏等等。这一节我们将把前面学到的内容综合起来，试着去绘制下面这张
地震学经常见到的大圆弧路径图。在这一过程中，我们将试着去理解 GMT 中图层的概念。

```{eval-rst}
.. gmtplot:: layers-5.sh
    :name: tutorial_layers_plot_1
    :width: 75%
    :show-code: false
```

## 图件分析与拆解

上面这张图看上去有些复杂，实际上是由很多部分构成的。将整张图拆解一下可知，
上图由如下几个部分构成：

1. 地形起伏作为底图
2. 震中位置（五角星）
3. 台站位置（三角形）
4. 射线路径（图中大圆弧）
5. 台站名（文字）

这几个部分，在教程的前几节都已经做过介绍，因而只需要将前几节的内容综合起来即可。

## 绘制底图

我们首先使用 {doc}`/module/grdimage` 模块绘制底图，并使用 {doc}`/module/colorbar`
模块添加色标：

```{eval-rst}
.. gmtplot:: layers-1.sh
    :width: 75%
```

## 绘制震中和台站位置

接下来，使用 {doc}`/module/plot` 模块绘制五角星和三角形。

```{eval-rst}
.. gmtplot:: layers-2.sh
    :width: 75%
```

## 绘制射线路径

再使用 {doc}`/module/plot` 模块绘制线段。
默认情况下，**plot** 会自动用大圆路径连接地球上的两个位置，
因而我们只需要用 `>` 分隔多个线段，每个线段给定两个坐标点（即地震位置和台站位置）
即可。

```{eval-rst}
.. gmtplot:: layers-3.sh
    :width: 75%
```

## 添加台站名

最后还需要往图画里添加台站所在地区的名字。添加文字使用 {doc}`/module/text` 模块。
这里我们使用了 **-F+f9p,1,black+j** 选项，因而输入数据是 4 列:

```
X   Y   对齐方式    TEXT
```

**-Dj0.1c/0.1c** 则是将文本在对齐方式的基础上做进一步的偏移以避免文字覆盖线段或符号。

```{eval-rst}
.. gmtplot:: layers-4.sh
    :width: 75%
```

## 图层的先后顺序

上面的绘图脚本已经基本绘制出我们最初想要的图件了。细细看会发现，还有一些不完美的
地方：比如黄色五角星和三角形被线段盖住了。

这是因为，GMT 的每一个绘图命令都会产生一个图层，后绘制的图层会覆盖在先绘制的图层
的上面，即后来者居上。解决办法也很简单，先绘制线段，再绘制三角形和五角星即可。

对脚本中命令的先后顺序进行微调，如下所示：

```{eval-rst}
.. gmtplot:: layers-5.sh
    :name: tutorial_layers_plot_2
    :width: 75%
```

这样我们就通过组合一系列简单的 GMT 命令，得到了一个复杂的 GMT 图件。
