4.9 绘制矢量/箭头

矢量是一个有大小和方向的量,通常用箭头↗ 表征矢量。一个矢量由两个独立的部分组成:矢量线和矢量头。矢量线与一般的线没有区别,通常由画笔属性(画笔)控制。这一节则主要介绍矢量头的属性及控制方式。

GMT 中能够绘制矢量的模块有 psxypsxyzgrdvectorpsvelopsrosepsternarypspolar。其中最常见的绘制矢量的模块是 psxy

下面的命令使用 psxy-Sv 选项绘制了一个最简单的矢量。

echo 1 1 0 3 | gmt psxy -R0/5/0/2 -JX5c/2c -Sv0.5c+e -W1.5p -Gred -P > vector.ps
../../_images/vector-gmtplot-0.png

接下来将介绍如何通过在 -Sv0.5c 后增加更多的子选项来进一步修改矢量头的属性。

4.9.1 矢量头位置及形状

在绘制矢量时,默认只绘制矢量线而不绘制矢量头。下面的几个子选项用于指定矢量头的位置以及形状:

  • +b[t|c|a|A|i|I][l|r]:在矢量线的起点加上矢量头

  • +e[t|c|a|i|A|I][l|r]:在矢量线的终点加上矢量头

  • +m[f|r][t|c|a][l|r]:在矢量线的中间加上矢量头

    t|c|a|i|A|I 用于控制矢量头的形状。取不同值所对应的矢量头形状如下图所示:

    Source Code

    ../../_images/vector-gmtplot-1.png
    • f|r+m 用用于指定矢量头的方向沿着正方向或逆方向(默认为正方向,即从起点指向终点)
    • l|r 表示只绘制矢量头的左半边或右半边(默认两边都绘制)

    注解

    +m 不能与 +b+e 一起使用

  • +l 只绘制左半个矢量头

  • +r 只绘制右半个矢量头

  • +a<angle> 用于控制矢量箭头的顶端的夹角,默认值为30度。对于 tc 而言则可以绘制端点线段的长度和圆圈的大小

  • +h<shape> 进一步控制矢量箭头 a 的形状,可以取-2到2之间的值。设置该子选项的值等效于修改参数 MAP_VECTOR_SHAPE (默认值为0)

    下面展示了 +h 后取不同值的矢量箭头的形状:

4.9.2 矢量头线条颜色和填充色

默认情况下,-W 选项同时控制矢量线和矢量头的画笔属性,-G 选项则控制矢量头的填充色。下面两个子选项可以单独控制矢量头的画笔属性和填充色。

  • +p<pen> 设置矢量头的画笔属性,<pen>- 表示不绘制矢量头的轮廓
  • +g<fill> 设置矢量头的填充色,<fill>- 表示不填充

4.9.3 其它属性

还可以使用如下子选项进一步控制矢量头的属性:

  • +n<norm> 默认情况下,矢量头的大小不随着矢量线的长度变化而变化,这可能会出现矢量线很短而矢量头过大,或者矢量线很长而矢量头过小的情况。该子选项使得矢量长度小于 <norm> 时,矢量头的属性(画笔宽度,箭头大小)会根据矢量长度按照 length/<norm> 缩放
  • +t[b|e]<trim> 用于增长或缩短矢量线首端或尾端的长度。其中 b 表示首端,e 表示尾端。 <trim> 为正值表示缩短矢量线,为负值表示增长矢量线。也可以直接使用 +t<trim1>/<trim2> 分别为首端和尾端指定增长/缩短量。

4.9.4 矢量类型及输入数据格式

GMT提供了三类矢量:

  • 笛卡尔矢量:矢量起点到终点的矢量线以直线方式连接
  • 地理矢量:矢量起点到终点之间的矢量线以大圆弧路径连接
  • 弧形矢量:矢量线是以某一点为中心的一段圆弧

psxy 模块中:

  • -Sv-SV 用于绘制笛卡尔矢量
  • -S= 用于绘制地理矢量
  • -Sm 用于绘制弧形矢量

下面的例子分别绘制了三种矢量:

PS=arrows.ps
# 笛卡尔矢量
echo 0.5 1.5 4.5 1.5 | gmt psxy -R0/5/0/5 -JX1.75i -Sv0.2i+s+b+e -W1.5p -Gred -K > $PS

# 地理矢量
echo 10 -35 90 8000 | gmt psxy -R0/90/-41.17/41.17 -JM1.75i -S=0.2i+b+e -W1.5p -Gred -X2i -K -O >> $PS

# 弧形矢量
echo 0.5 0.5 0.9i 0 90 | gmt psxy -R0/5/0/5 -JX1.75i -Sm0.2i+b+e -W1.5p -Gred -X2i -O >> $PS
../../_images/vector-gmtplot-3.png

三种矢量:(左)笛卡尔矢量;(中)地理矢量;(右)弧形矢量

笛卡尔矢量和地理矢量

对于笛卡尔矢量和地理矢量,输入数据的格式为:

X    Y    angle  length

其中X和Y是矢量起点坐标,angle 为矢量方向(相对于水平方向逆时针旋转的角度或相对于北向顺时针的方位角),length 为矢量线长度(长度单位为 c|i|p或km)。

使用如下子选项则可以指定其它输入数据格式:

  • +s 表示将输入数据的中的angle和length解释为矢量的终点坐标
  • +j[b|c|e] 表示将输入数据中的X和Y坐标解释为矢量的起点坐标、中点坐标或终点坐标

对于地理矢量,还可以使用如下选项:

  • +q 表明输入数据中的 anglelength 表示相对于某个指定极点的大圆路径的起始和结束的角度。该极点默认为北极,可以使用 +o 修改该点的位置
  • +o<plon>/<plat> 用于指定 +q 中大圆路径中的倾斜极点

对于笛卡尔矢量而言,还可以使用:

  • +z<scale>[<unit>] 表示输入数据中的 anglelength 被解释为矢量的X分量dx和Y分量dy,然后计算出对应的极坐标下的方向和长度,并将矢量长度乘以 <scale>

圆弧矢量

对于圆弧矢量,输入数据中需要给定圆弧对应的圆心坐标、半径,以及圆弧起始和结束的角度。