繪製底圖

GMT可以繪製多種不同類型的底圖,包括全球地圖、區域地圖,以及線性座標軸、對數軸、指數軸、極座標軸,甚至3D座標軸。

這一節我們將通過使用 coastbasemap 模塊繪製不同類型的底圖,並瞭解GMT中 -J-R-B 選項的基本用法。

全球地圖

要繪製地圖,就需要將地球的三維球面投影到一個二維面上,投影的過程需要指定投影方式。GMT中使用 -J 選項指定地圖投影參數以及地圖的尺寸。同時,我們還需要使用 -R 選項指定要繪製的區域範圍(即經緯度範圍)。

下面用最簡單的命令繪製了一張全球地圖。

gmt begin GlobalMap png,pdf
    gmt coast -JH180/12c -R0/360/-90/90 -W0.5p -A10000
gmt end show
../_images/basemap-gmtplot-01.png

全球地圖(無邊框版)

先忽略後面的 -W0.5p -A10000(後面章節會介紹到),這裏只關注 -J-R 選項。此示例中:

  1. -JH180/12c 指定地圖投影參數,H 表示使用Hammer投影,地圖中心位於經度180°處,地圖寬度爲12釐米(12cc 表示單位釐米);
  2. -R0/360/-90/90 指定要繪製的區域範圍,即經度0°到360°,緯度-90°到90°,四個數字之間用斜槓 / 分隔。

上面使用了非常簡單的GMT命令即繪製出了一張全球地圖的底圖,但其跟我們常見的全球地圖比還缺了個底圖邊框。GMT中可以使用 -B 選項爲地理底圖加上邊框並繪製經緯線。

gmt begin GlobalMap png,pdf
    gmt coast -JH180/12c -Rg -Bg -W0.5p -A10000
gmt end show
../_images/basemap-gmtplot-11.png

全球地圖(有邊框版)

跟上一個腳本相比,此處我們做了兩點修改:

  1. 使用 -Rg 代替了 -R0/360/-90/90。這二者是完全等效的。由於繪製全球地圖是很常見的需求,因而GMT爲其設計了一個更簡單的寫法。 -Rgg 代表 global。
  2. 增加了 -Bg 選項。-B 用於給底圖加上邊框,其中的 g 則用於向底圖中加入網格線(g 代表 grid)。

小技巧

GMT支持30多種不同的地圖投影方式,詳情見 地圖投影 一章。將上面的示例腳本中 -JH180/12c 修改爲下面列出的一些值以瞭解不同投影方式之間的差異:

  • -JA280/30/12c
  • -JI180/12c
  • -JK180/12c
  • -JN180/12c
  • -JR180/12c

區域地圖

繪製區域地圖與繪製全球地圖沒有本質區別,我們依然需要使用 -J 指定投影方式,使用 -R 指定繪圖區域範圍,使用 -B 指定底圖邊框。

下面的GMT命令繪製了一張新西蘭地圖。

gmt begin NewZealandMap png,pdf
    gmt coast -JM12c -RNZ -Ba -W0.5p -A10000
gmt end show
../_images/basemap-gmtplot-2.png

使用國家代碼指定繪圖區域

這裏我們使用了:

  • -JM12c 指定了使用墨卡託投影(繪製區域地圖最常用的投影方式),地圖寬度爲12釐米;
  • -RNZ 指定了繪圖區域範圍,此處 NZ 是新西蘭的國家代碼,GMT會自動根據國家代碼提取該國家的區域範圍並用於繪圖;
  • -Ba 用於給底圖添加邊框。對於某些地圖投影,GMT默認使用圖中所示的黑白相間的底圖邊框。a 用於添加標註(annotation,即圖中的經緯度數字)。

如果對於根據國家代碼自動確定的區域範圍不太滿意,我們也可以使用 -R 選項最原始的方式來指定區域範圍。即依次給定繪圖區域的最小經度、最大經度、最小緯度和最大緯度。記起來也很容易,可以記爲 xmin/xmax/ymin/ymax,或者直接記“西東南北”。

通過上面的圖,我們大概知道了新西蘭的經緯度範圍。我們可以直接使用 -R165/180/-48/-32 指定繪圖區域。

gmt begin NewZealandMap png,pdf
    gmt coast -JM12c -R165/180/-48/-32 -Bafg -W0.5p -A10000
gmt end show
../_images/basemap-gmtplot-3.png

使用經緯度範圍指定繪圖區域

上面的例子中我們還調整了 -B 選項,-Bafg 表示繪製底圖邊框的標註(annotation)、刻度線(frame,即圖中黑白線段的間隔)和網格線(grid)。標註、刻度線以及網格線的間隔由GMT算法自動決定。

對GMT自動算法確定的間隔不滿意?你還可以任意指定自己想要的間隔。下面例子中,我們對底圖進行了進一步的自定義,爲X軸和Y軸分別指定了間隔,並給底圖添加了標題:

  • -Bxa4g2 表示設置X軸(x)的標註間隔爲4度、網格線間隔爲2度(a4g2
  • -Bya3g3 表示設置X軸(y)的標註間隔爲3度、網格間隔爲3度(a3g3
  • -BWSen 中WSEN分別是西南東北四個方向的英文單詞首字母,用於控制四條邊的屬性。大寫的 WS 表示給西邊和南邊添加標註,而小寫的 en 則表示對於東邊和北邊只繪製邊框但不顯示標註
  • -BWSen+t”New Zealand”+t 用於給整張圖添加標題(title)。由於標題 New Zealand 中含有空格,我們需要使用引號將其括起來
gmt begin NewZealandMap png,pdf
    gmt coast -JM12c -R165/180/-48/-32 -Bxa4g2 -Bya3g3 -BWSen+t"New Zealand" -W0.5p -A10000
gmt end show
../_images/basemap-gmtplot-4.png

爲區域地圖添加標題

線性座標軸

GMT最擅長繪製地圖,同時也適合繪製最簡單的線性座標軸。同樣的,要想繪製線性座標軸,我們依然需要使用 -R 指定座標軸範圍,使用 -B 繪製邊框並指定邊框和座標軸屬性,同時,我們還需要使用 -JX 指定線性座標軸的寬度和高度。

下面的示例中,我們使用了:

  • -JX8c/5c 表明線性座標軸的寬度爲8釐米,高度爲5釐米
  • -R10/70/-4/8 表明X軸範圍爲10到70,Y軸範圍爲-4到8
  • -Bxa10f5g10+l”X Label” 設置了X軸的屬性, a10f5g10 分別設置了標註(annotation)間隔爲10,刻度(frame)間隔爲5,網格線(grid )間隔爲10; +l”X Label” 則爲X軸添加了標籤;對於Y軸同理;
gmt begin linearXY png,pdf
    gmt basemap -R10/70/-4/8 -JX8c/5c -Bxa10f5g10+l"X Label" -Bya4f2g2+l"Y Label" -BWSen+t"Linear X-Y Plot"
gmt end show
../_images/basemap-gmtplot-5.png

線性座標軸

GMT同樣也可以繪製對數軸、指數軸以及極座標軸,在這一節中不再介紹。

三維線性座標軸

三維座標軸相對於二維座標軸多了一個Z軸。與二維線性座標軸類似,我們需要針對Z軸指定Z軸的範圍、Z軸的高度以及三維視角。

下面的命令繪製了一個三維線性座標軸,相比於傳統的二維線性座標軸,其不同之處在於:

  • -R 選項中有6個數字,後面兩個數字表示Z軸最小值和最大值
  • -JZ5c 指定了Z軸的高度爲5釐米
  • -Bzaf 指定了Z軸的標註和刻度屬性
  • -BSEwnZ+bZ+b 表示繪製一條Z軸,並繪製出整個長方體的所有邊
  • -p130/30 指定了看這個長方形的視角。130和30分別爲三維視角的方位角和高度角。這個解釋起來稍複雜,讀者可以自己試試修改這兩個參數並查看效果。方位角的取值範圍爲0到360度,高度角的取值範圍爲0到90度。
gmt begin 3DMap png,pdf
    gmt basemap -R10/70/-4/8/-10/10 -JX8c/5c -JZ5c -Bxa10+lX -Bya4+lY -Bzaf+lDepth -BSEwnZ+b+t"3D Plot" -p130/30
gmt end show
../_images/basemap-gmtplot-6.png

三維線性座標軸