---
author: 田冬冬, lxrat
date: 2024-09-12
---

# -p 选项

**-p** 选项用于控制2D底图或3D底图的透视视角。

对于一个2D底图（比如二维平面内的矩形）或者一个3D底图（比如三维空间内的立方体），
从不同的方向看时会看到不同的形态。该选项用于控制从怎样的透视视角去看一张图。其语法为：

> **-p**\[**x**|**y**|**z**\]*azim*\[/*elev*\[/*zlevel*\]\]\[**+w***lon0*/*lat0*\[/*z0*\]\]\[**+v***x0*/*y0*\]

*azim* 指定视角的方位角，即相对于北方向顺时针旋转的角度，默认值为180。

*elev* 指定视角的海拔，即视角相对于纸张平面向上旋转的角度，其取值范围为
0到90（不含0），其中0表示视角与纸张平面平行，90表示视角垂直于纸张平面，默认值为90。

下图给出了2D底图下透视视角取不同值时所看到的底图。

```{eval-rst}
.. gmtplot:: p/p-option-example-2D.sh
   :show-code: false
```

对于3D底图而言（使用了 **-JZ** 选项），默认会在Z轴底部绘制XY平面的边框。

- 设置 *zlevel* 则可以指定在 **Z=**_zlevel_ 平面内绘制边框
- **-px|y|z** 则分别用于指定绘制 YZ 平面、XZ平面或XY平面。默认为 **-pz** 即
  绘制XY平面

下图给出了3D底图上使用不同的 **-p** 选项绘制出来的效果图。绘制底图使用的命令为:

```
gmt basemap -R0/10/0/10/0/20 -JX3c -JZ3c -Baf -Bzaf -BwsENZ1+b -p135/40 -pdf 3D-map
```

```{eval-rst}
.. gmtplot:: p/p-option-example-3D.sh
   :show-code: false
```

:::{warning}
**-px** 和 **-py** 存在已知BUG，会导致YZ平面或XZ平面无法放置到正确的位置处，
目前这一BUG尚未解决。
:::

在绘制动画时，如果不同帧使用的 **-p** 透视参数不同，则由于投影的问题可能会导致
底图在纸上的位置出现不规则运动。可以有三种方式解决：

1. 加上 **+** 使得数据范围的中心点固定在纸张的中心
2. 加上 **+w***lon0*/*lat0*/*z* 将地图上的某个点固定在纸张的中心
3. 加上 **+v***x0*/*y0* 使得数据范围的中心点或地图上的某个点，在投影后的位置始终
   固定在纸张上的 *x0*/*y0* 处

除此之外，若 **-p** 选项后不接任何参数，则其会继承前一GMT绘图命令的 **-p** 参数。
