---
author: 朱邓达, 田冬冬
date: 2025-06-08
---

# 修饰物

GMT除了可以绘制线段、符号、矢量外，还可以绘制如下修饰物：

1. 地图比例尺
2. 色标
3. 图例
4. 方向玫瑰
5. 磁场玫瑰
6. 叠加图片
7. GMT logo
8. 小图（map inset）
9. 垂直比例尺

这些修饰物可以用不同的模块绘制，且有各自的语法。所有这些修饰物都可以抽象为一个矩形
元素。这一节介绍一种通用的机制，以指定这些修饰物在图上的位置以及修饰物的背景面板。

## 定位

绘制修饰物的模块大多有一个选项用于指定修饰物在底图上的位置，其基本语法为：

> \[**g**|**j**|**J**|**n**|**x**\]*refpoint*\[**+j***justify*\]\[**+o***dx*\[/*dy*\]\]

为了精确地将修饰物放在底图上的任意一点，GMT需要做四件事：

1. 通过 \[**g**|**j**|**J**|**n**|**x**\]*refpoint* 语法指定底图上的一个**参考点**
2. 通过 **+j***justify* 指定修饰物上的一个**锚点**
3. 通过 **+o***dx*\[/*dy*\] 对修饰物的锚点做偏移
4. 将修饰物的偏移后的锚点与底图上的参考点重合以实现修饰物的放置

下图展示了GMT如何实现修饰物的精确放置。其中大矩形代表底图，小矩形代表修饰物。
本示例中首先指定了底图左上角为参考点，并指定了修饰物的左上角为锚点，
通过 **+o***dx*\[/*dy*\] 对修饰物锚点进行微调。

```{eval-rst}
.. gmtplot:: embellishment.sh
    :show-code: false
    :caption: 参考点与锚点
```

### 底图参考点

GMT提供了5种方法用于指定底图的参考点，使得用户可以灵活地指定底图内/外的任意一点
作为参考点。五种方法分别以 **g**|**j**|**J**|**n**|**x** 开头。
若未指定使用何种方式，则默认使用 **x** 方式指定参考点。

#### 通过坐标指定参考点

(refpoint_g)=

数据坐标

: 用 **g***lon*/*lat* 指定参考点的数据坐标。例如 **g135/20** 表示参考点的坐标
  为 135/20

(refpoint_x)=

绘图坐标

: 用 **x***X*/*Y* 指定参考点的绘图坐标，即给出参考点相对于绘图原点的偏移距，
  例如 **x4c/2c** 表示参考点位于底图原点的右侧4厘米，上方2厘米处

(refpoint_n)=

归一化坐标

: 用 **n***X*/*Y* 指定参考点的归一化坐标。归一化坐标是指，底图所对应的矩形的
  X轴范围为0到1，Y轴同理。使用负值或者大于1的值则可以指定底图外的一点为参考点。
  比如 **n0.2/0.1**

(refpoint_j)=

#### 通过锚点指定参考点

可以用 **j***anchor* 或 **J***anchor* 的方式指定底图的某个锚点作为底图参考点。
其中锚点 *anchor* 有9个可能的取值，在 {doc}`锚点 <anchor>` 一节中已经详细介绍过。
例如 **j**TL 指定了底图左上角为参考点。

使用 **j***anchor* 或 **J***anchor* 方式指定底图参考点的同时，也设置了修饰物
上默认使用的锚点位置。使用 **j***anchor* 方式修饰物的默认锚点与参考点锚点相同。
例如 **jTL** 指定底图左上角为参考点，同时也指定了修饰物左上角为其锚点，即底图左上角
与修饰物左上角重合，则修饰物位于底图左上角的**内部**。当需要将修饰物放在底图
内部某个角落、某条边的中心或图的中心时，建议使用 **j**。

使用 **J***anchor* 方式，修饰物的默认锚点是与底图参考点锚点呈镜像相反。例如
**JTL** 指定底图的左上角作为参考点，同时指定了修饰物的默认锚点是 **BR**
即右下角（镜像对称）。因而底图的左上角与修饰物的右下角重合，则修饰物位于底图左上角
的**外部**。当需要将修饰物放在底图的外部时，建议使用 **J**。

(embellishment_anchor)=

### 修饰物锚点

在指定底图参考点后，可以进一步用 **+j***anchor* 指定修饰物上的锚点。

若未使用 **+j***anchor* 指定锚点，则修饰物的锚点按如下规则取默认值：

1. 若使用 **j***anchor* 方式指定底图参考点，则修饰物锚点与底图锚点相同
2. 若使用 **J***anchor* 方式指定底图参考点，则修饰物锚点使用与底图参考点镜像相反的锚点
3. 若使用其它三种方式指定参考点，对于玫瑰图和比例尺而言，锚点默认为 **MC**，
   其他修饰物锚点默认为 **BL**

### 修饰物锚点偏移量

指定底图参考点和修饰物锚点后，即可将二者重合起来，实现修饰物在底图上的定位。
在此基础上，可以额外使用 **+o***dx*/*dy* 指定修饰物锚点的偏移量。
尤其是在使用 **j** 和 **J** 指定底图参考点时，由于底图只能指定某个锚点作为参考点，
因而就需要为修饰物锚点指定额外的偏移量以增加定位的灵活性。
偏移量为正值表示沿着与指定锚点所使用的对齐代码同一方向作偏移。

比如使用 **jTL** 指定底图左上角为参考点，同时修饰物的左上角锚点也被选中，此时
使用 **+o2c/1c** 表示将修饰物的左上角锚点向左移动 2 cm、向上移动 1 cm，最后将
底图参考点与偏移后的锚点对齐。

(Background-panel)=

## 背景面板

对于任意一个修饰物，GMT都可以为其绘制一个背景面板。
背景面板的位置和大小由修饰物直接决定。除此之外，背景面板还有一些其他属性。
背景面板的属性由 **-F** 选项的子选项决定：

**-F**\[**+c***clearance*\]\[**+g***fill*\]\[**+i**\[\[*gap*/\]*pen*\]\]\[**+p**\[*pen*\]\]\[**+r**\[*radius*\]\]\[**+s**\[*dx*/*dy*/\]\[*fill*\]\]

```{eval-rst}
.. include:: /module/explain_-F_box.rst_
```

```{eval-rst}
.. gmtplot:: panel.sh
    :show-code: false

    GMT修饰物背景面板

    左图使用了 **-F+glightgreen+r**，右图使用了 **-F+p1p+i+s+gwhite+c0.1i** (不包含最内侧虚线框)
```
