繪製底圖¶
GMT可以繪製多種不同類型的底圖,包括全球地圖、區域地圖,以及線性座標軸、對數軸、指數軸、極座標軸,甚至3D座標軸。
這一節我們將通過使用 coast 和 basemap 模塊繪製不同類型的底圖,並瞭解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
先忽略後面的 -W0.5p -A10000(後面章節會介紹到),這裏只關注 -J 和 -R 選項。此示例中:
- -JH180/12c 指定地圖投影參數,H 表示使用Hammer投影,地圖中心位於經度180°處,地圖寬度爲12釐米(12c,c 表示單位釐米);
- -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
跟上一個腳本相比,此處我們做了兩點修改:
- 使用 -Rg 代替了 -R0/360/-90/90。這二者是完全等效的。由於繪製全球地圖是很常見的需求,因而GMT爲其設計了一個更簡單的寫法。 -Rg 中 g 代表 global。
- 增加了 -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
這裏我們使用了:
- -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
上面的例子中我們還調整了 -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
線性座標軸¶
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
GMT同樣也可以繪製對數軸、指數軸以及極座標軸,在這一節中不再介紹。
三維線性座標軸¶
三維座標軸相對於二維座標軸多了一個Z軸。與二維線性座標軸類似,我們需要針對Z軸指定Z軸的範圍、Z軸的高度以及三維視角。
下面的命令繪製了一個三維線性座標軸,相比於傳統的二維線性座標軸,其不同之處在於:
- -R 選項中有6個數字,後面兩個數字表示Z軸最小值和最大值
- -JZ5c 指定了Z軸的高度爲5釐米
- -Bzaf 指定了Z軸的標註和刻度屬性
- -BSEwnZ+b 中 Z+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