製作CPT¶
GMT模塊 makecpt 和 grd2cpt 可以內置CPT文件爲基礎,針對用戶自己的數據製作專門的CPT文件;也可以將用戶自定義CPT重新調整爲一個新的範圍、顏色倒轉甚至屏蔽部分顏色的新色標文件。比如某個內置CPT文件定義了從0到1顏色從藍色變成紅色,用 makecpt 可以製作一個從1000到3000顏色從藍色變成紅色的CPT文件。不同的是, makecpt 常用於已知極值範圍的表數據,而 grd2cpt 常用於將cpt適用於一個或多個格網數據。此外,兩者均可通過以下方式翻轉顏色:
- 利用
-Iz
選項倒轉CPT的z值指向(不包括前景色、背景色)。用於數據的正負顏色表示和慣例不符的情況(比如用正值表示海平面以下的深度,而不是慣常的負高程)。 - 利用
-Ic
選項翻轉顏色的順序,包括前景色和背景色(與colorbar
的寬度設爲負值效果一致)。 -Icz
表示以上兩種效果的疊加,即顏色順序不變,只調轉了前景色和背景色- 利用
-G
選項提取主CPT的一部分顏色 - 最後,將初始的內置CPT或修改後的CPT拉伸爲自定義數據範圍
#!/bin/bash
SIZE=w15c/0.25c
gmt begin cpt_4 pdf,png
gmt makecpt -Chaxby -T-10/10/1 -H > Icpt.cpt
gmt makecpt -Chaxby -T-10/10/1 -H -Iz > Icpt_z.cpt
gmt makecpt -Chaxby -T-10/10/1 -H -Ic > Icpt_c.cpt
gmt makecpt -Chaxby -T-10/10/1 -H -Icz > Icpt_cz.cpt
gmt plot -R1/10/1/10 -JX20c -T
gmt colorbar -CIcpt.cpt -Dn0.5/0.25+jCM+$SIZE+h+e+n -B+l"Master CPT"
gmt colorbar -CIcpt_c.cpt -Dn0.5/0.4+jCM+$SIZE+h+e+n -B+l"-Ic"
gmt colorbar -CIcpt_z.cpt -Dn0.5/0.55+jCM+$SIZE+h+e+n -B+l"-Iz"
gmt colorbar -CIcpt_cz.cpt -Dn0.5/0.7+jCM+$SIZE+h+e+n -B+l"-Icz"
rm Icpt*.cpt
gmt end

注:這些CPT的調整選項順序也是有優先級的。比如 -Iz
使用後,所有其他的更改都是基於z值反向的前提進行的。
CPT文件可以在 grdimage、plot、plot3d
等命令中使用。通常,你可以使用 makecpt 或 grd2cpt
對已有的CPT(比如GMT內置的CPT)文件進行重採樣,並適應你目前所使用的數據範圍。當然,也可以自己手寫CPT文件,或使用 awk
、
perl
之類的文本處理工具自動生成CPT文件。由於GMT中可以用多種方式來指定顏色,因而GMT自帶的或用戶自己的CPT文件中通常含有如下注釋語句:
# COLOR_MODEL = model
其中 model
可以取 RGB、hsv、cmyk,其指定了CPT文件中的顏色要如何進行解釋。
週期性CPT文件¶
有一類特殊的CPT文件稱之爲週期性CPT文件。對於這類CPT文件而言,GMT在根據Z值查找對應的顏色時,會首先從Z值中減去CPT文件中Z值範圍的整數倍,使得Z值永遠落在CPT 文件所指定的範圍內。這意味着此類CPT文件沒有前景色和背景色。
比如,現在有一個週期性CPT文件,其定義了Z值範圍在 \(-\pi\) 到 \(\pi\) 之間的顏色表。若Z值等於 \(3/2\pi\) ,則會取 \(-\pi/2\) 處的值作爲其顏色。
在使用 makecpt
或 grd2cpt
生成CPT文件時加上 -Ww
選項即可生成周期性
CPT文件。該選項本質上是在CPT文件中加上一個特殊的註釋行:
# CYCLIC
GMT在CPT中看到這一註釋行時就會將該CPT當作時週期性CPT文件。

動態CPT¶
GMT 內置的 CPT 文件都是動態的。
所有動態CPT文件都按照兩種方式中的一種進行了歸一化:
如果爲存在分界(hinge)的區域填色(如地形顏色在高程爲0的海岸線處發生非連續的分界)那麼CPT的z值在一側爲-1到0;另一側爲0到1;分界線上爲0。CPT文件中對分界線的值註釋如下:
# HINGE = <hinge-value>
按照這種方式歸一化的內置CPT包括
earth
etopo1
geo
globe
polar
red2green
relief
sealand
split
terra
topo
world
如果不存在顏色的分界,則CPT的z值歸一化爲0到1之間。實際使用中,CPT的z值會拉伸到用戶指定的範圍,包括兩種拉伸模式:
默認指定一個數值範圍,實際應用中(如地形渲染)再拉伸到真實值。見CPT文件中的RANGE註釋:
# RANGE = <zmin/zmax>
若未給定範圍,則擴展到數據的極限值
下圖展示了動態的內置CPT如何拉伸適用於用戶自定義數據,繪製命令如下:
#!/bin/bash
gmt begin cpt_3 pdf,png
gmt makecpt -Cglobe -T-8000/3000
gmt colorbar -C -Baf -Dx0/0+w4.5i/0.1i+h
gmt colorbar -Cglobe -Baf -Dx0/0+w4.5i/0.1i+h -Y0.5i
gmt end

原始的內置CPT(globe,上圖)的初始範圍爲-10000至10000,顏色不連續處的分界值(hinge)爲0,小於0的部分爲海藍色系,大於0的部分爲大地色系。但實際上,我們要繪製的區域高程值是非對稱的,從-8000米到3000米(下圖)。由於hinge值的存在,負高程依舊由海藍色拉伸填充,正高程則由大地色壓縮填充。
注:若要實現hinge分界效果,makecpt
命令中的 -T
選項不可設置 /<z_int>
。