---
author: 田冬冬
date: 2024-09-09
---

# -X 和 -Y 选项

**-X** 和 **-Y** 选项用于控制绘图原点在X和Y方向的偏移量。

当需要在一张图上绘制多个子图时，通常可以使用GMT提供的 {doc}`子图模式 </module/subplot>`。
若子图的布局不规则，或对于子图原点有更复杂的需求，则需要使用 **-X** 和 **-Y** 选项
移动子图的底图原点的位置。

**-X** 和 **-Y** 的用法类似。下面仅以 **-X** 选项为例介绍其用法。
其语法为：

> **-X**\[**a**|**c**|**f**|**r**\]\[*xshift*\[**u**\]\]

其中 *xshift* 是新原点相对于当前原点的X方向偏移量，*u* 为偏移量的单位。

在偏移量之前加上不同的字符表示不同的含义：

- **-X2i** 或 **-Xr2i**：在**原底图原点**的基础上沿X方向偏移2英寸得到新底图原点
- **-Xa5c**：在**原底图原点**的基础上沿X方向偏移5厘米得到临时底图坐标，
  当前命令执行完成后，底图原点复原到**原底图原点**
- **-Xc**：将底图中心放在整张纸的中心
- **-Xc3c**：将底图中心放在**纸张中心**，在此基础上沿X方向偏移3厘米
- **-Xf4c**：在**纸张左下角**的基础上沿着X方向偏移4厘米得到新底图原点
- **-X** 不接任何额外参数，则继承前一个GMT命令使用该选项时的参数值

**-X** 和 **-Y** 选项的用法介绍起来有些难度，多试试就好。下面举个简单的例子:

```
gmt begin test pdf
gmt basemap -JX5c/2c -R0/5/0/2 -B1
gmt basemap -B1 -X7c
gmt basemap -B1 -X-7c -Y4c
gmt basemap -B1 -X7c
gmt end show
```

上图用四个 {doc}`/module/basemap` 命令绘制了四张底图，绘图效果如下：

```{eval-rst}
.. gmtplot::
    :show-code: false
    :width: 75%
    :caption: **-X** 和 **-Y** 移动绘图原点

    gmt begin XY
    gmt text -F+f40p+cMC+t1 -JX5c/2c -R0/5/0/2 -BWSen -B1
    gmt text -F+f40p+cMC+t2 -BWSen -B1 -X7c
    gmt text -F+f40p+cMC+t3 -BWSen -B1 -X-7c -Y4c
    gmt text -F+f40p+cMC+t4 -BWSen -B1 -X7c
    gmt end show
```

解释：

1. 第一个命令的绘图原点位于纸张左下角，绘制底图1
2. 第二个将绘图原点右移了7 cm，绘制底图2
3. 为了绘制底图3，第三个命令将底图左移了7 cm，并上移4 cm
4. 第四个命令在底图3的基础上右移7 cm，绘制底图4

实际绘图时会发现一些不方便的地方。比如 **-X** 和 **-Y** 的偏移量与前一张底图的
大小息息相关。若修改了前一张底图的大小，则下一张底图的偏移量也需要相应修改。
为解决这一问题，GMT6引入了一种新的语法：

> **-X**\[**+**|**-**\]**w**\[\[**+**|**-**|**/**\]*xshift*\[*u*\]\]
>
> **-Y**\[**+**|**-**\]**h**\[\[**+**|**-**|**/**\]*xshift*\[*u*\]\]

其中 **w** 和 **h** 分别表示前一底图的宽度和高度。

看上去语法很复杂，举几个例子：

- **-Yh+2c**：沿着Y轴上移，上移距离为**前一底图高度+2厘米**
- **-Xw-2c**：沿着X轴右移，右移距离为**前一底图宽度-2厘米**
- **-Xw/2**：沿着X轴右移，右移距离为**前一底图宽度/2**
- **-Y-h-2c**：沿着Y轴下移，下移距离**前一底图高度+2厘米**
- **-X-w+2c**：沿着X轴左移，左移距离**前一底图宽度-2厘米**

因而，上面的示例可以改写为更灵活的版本:

```
gmt begin test pdf
gmt basemap -JX5c/2c -R0/5/0/2 -B1
gmt basemap -B1 -Xw+2c
gmt basemap -B1 -X-w-2c -Yh+2c
gmt basemap -B1 -Xw+2c
gmt end show
```
