繪製矢量/箭頭

矢量是一個有大小和方向的量,通常用箭頭↗ 表徵矢量。一個矢量由兩個獨立的部分組成:矢量線和矢量頭。矢量線與一般的線沒有區別,通常由畫筆屬性(畫筆)控制。這一節則主要介紹矢量頭的屬性及控制方式。

GMT 中能夠繪製矢量的模塊有 plotplot3dgrdvectorveloroseternarypolar。其中最常見的繪製矢量的模塊是 plot

下面的命令使用 plot-Sv 選項繪製了一個最簡單的矢量。

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

接下來將介紹如何通過在 -Sv0.5c 後增加更多的子選項來進一步修改矢量頭的屬性。

矢量頭位置及形狀

在繪製矢量時,默認只繪製矢量線而不繪製矢量頭。下面的幾個子選項用於指定矢量頭的位置以及形狀:

  • +b[t|c|a|A|i|I][l|r]:在矢量線的起點加上矢量頭

  • +e[t|c|a|A|i|I][l|r]:在矢量線的終點加上矢量頭

  • +m[f|r][t|c|a][l|r]:在矢量線的中間加上矢量頭

    t|c|a|A|i|I 用於控制矢量頭的形狀。取不同值所對應的矢量頭形狀如下圖所示:

    Source Code

    ../_images/vector-gmtplot-1.png
    • l|r 表示只繪製矢量頭的左半邊或右半邊(默認兩邊都繪製)。其中左定義爲從矢量起點看向終點時的左側
    • f|r+m 中用於指定矢量頭的方向沿着正方向或逆方向(默認爲正方向,即從起點指向終點)

    注解

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

  • +l 只繪製左半個矢量頭

  • +r 只繪製右半個矢量頭

  • +aangle 用於控制矢量箭頭的頂端的夾角,默認值爲30度。若矢量頭形狀爲 tc 則表示端點線或端點圓圈的大小

  • +hshape 進一步控制矢量頭 a 的形狀,其中 shape 可以取-2到2之間的值。設置該子選項的值等效於修改參數 MAP_VECTOR_SHAPE (默認值爲0)

    下面展示了 +h 後取不同值的矢量箭頭的形狀:

矢量頭線條顏色和填充色

默認情況下,-W選項同時控制矢量線和矢量頭的畫筆屬性,-G 選項則控制矢量頭的填充色。下面兩個子選項可以單獨控制矢量頭的畫筆屬性和填充色。

  • +ppen 設置矢量頭的畫筆屬性,pen- 表示不繪製矢量頭的輪廓
  • +gfill 設置矢量頭的填充色,fill- 表示不填充

其它屬性

還可以使用如下子選項進一步控制矢量頭的屬性:

  • +nnorm 默認情況下,矢量頭的大小不隨着矢量線的長度變化而變化,這可能會出現矢量線很短而矢量頭過大,或者矢量線很長而矢量頭過小的情況。該子選項使得矢量長度小於 norm 時,矢量頭的屬性(畫筆寬度,箭頭大小)會根據矢量長度按照 length/norm 縮放
  • +t[b|e]trim 用於增長或縮短矢量線首端或尾端的長度。其中 b 表示首端,e 表示尾端。 trim 爲正值表示縮短矢量線,爲負值表示增長矢量線。也可以直接使用 +ttrim1/trim2 分別爲首端和尾端指定增長/縮短量。

矢量類型及輸入數據格式

GMT提供了三類矢量:

  • 笛卡爾矢量:矢量起點到終點的矢量線以直線方式連接
  • 地理矢量:矢量起點到終點之間的矢量線以大圓弧路徑連接
  • 弧形矢量:矢量線是以某一點爲中心的一段圓弧

plot 模塊中:

  • -Sv-SV 用於繪製笛卡爾矢量
  • -S= 用於繪製地理矢量
  • -Sm 用於繪製弧形矢量

下面的例子分別繪製了三種矢量:

gmt begin arrows pdf,png
# 笛卡爾矢量
echo 0.5 1.5 4.5 1.5 | gmt plot -R0/5/0/5 -JX1.75i -Sv0.2i+s+b+e -W1.5p -Gred
# 地理矢量
echo 10 -35 90 8000 | gmt plot -R0/90/-41.17/41.17 -JM1.75i -S=0.2i+b+e -W1.5p -Gred -X2i
# 弧形矢量
echo 0.5 0.5 0.9i 0 90 | gmt plot -R0/5/0/5 -JX1.75i -Sm0.2i+b+e -W1.5p -Gred -X2i
gmt end
../_images/vector-gmtplot-3.png

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

笛卡爾矢量和地理矢量

對於笛卡爾矢量和地理矢量,輸入數據的格式爲:

X    Y    angle  length

其中X和Y是矢量起點座標,angle 爲矢量方向(相對於水平方向逆時針旋轉的角度或相對於北向順時針的方位角),length 爲矢量線長度(長度單位爲 c|i|p 或km)。

使用如下子選項則可以指定其它輸入數據格式:

  • +s 表示將輸入數據的中的 anglelength 解釋爲矢量的終點座標
  • +j[b|c|e] 表示將輸入數據中的X和Y座標解釋爲矢量的起點座標、中點座標或終點座標

對於地理矢量,還可以使用如下選項:

  • +q 表明輸入數據中的 anglelength 表示相對於某個指定極點的大圓路徑的起始和結束的角度。該極點默認爲北極,可以使用 +o 修改該點的位置
  • +oplon/plat 用於指定 +q 中大圓路徑中的傾斜極點

對於笛卡爾矢量而言,還可以使用:

  • +zscale[unit] 表示輸入數據中的 anglelength 被解釋爲矢量的X分量dx和Y分量dy,然後計算出對應的極座標下的方向和長度,並將矢量長度乘以 scale

圓弧矢量

對於圓弧矢量,輸入數據中需要給定圓弧對應的圓心座標、半徑,以及圓弧起始和結束的角度。