4.12 绘制修饰物¶
GMT 除了可以绘制常规的数据外,还可以绘制8种修饰物:
- 地图比例尺(
psbasemap -L
pscoast -L
) - 方向玫瑰图(
psbasemap -Td
) - 磁场玫瑰图(
psbasemap -Tm
) - 颜色条(
psscale
) - 图例(
pslegend
) - Image overlay(
psimage
) - GMT logo (
gmtlogo
) - map inset (
psbasemap -D
)
8种修饰物的绘制有各自不同的语法,但这些修饰物都可以抽象为一个矩形。对于这些抽象的矩形,GMT 设计了一套非常通用的机制,来决定这些修饰物在图上的位置,同时为这些矩形设计了统一的可定制的背景面板。
4.12.1 定位¶
GMT 通过 -D[g|j|J|n|x]<refpoint>[+j<justify>][+o<dx>[/<dy>]]
选项对修饰物进行定位。
GMT 为了将一个修饰物放在底图上,做了四件事:
[g|j|J|n|x]<refpoint>
: 在底图上指定一个参考点+j<justify>
在修饰物上指定一个锚点+o<dx>[/<dy>]
指定修饰物锚点的额外偏移量- 将底图参考点与偏移后的修饰物锚点对齐
下图中,大矩形代表底图,小矩形代表修饰物。

注解
一个比较形象的比喻:将底图看作是一片海洋,将修饰物看作是一条小船。小船航行到海洋中的某个参考点,然后将船上的一个锚(按照GMT的定义,这条船有9个锚)从参考点处丢下,即实现了船在海洋中的定位。
底图参考点¶
GMT 提供了5种方式用于指定底图的参考点,5种方法提供了极高的自由度,使得用户可以指定底图内/外的任意一点作为参考点。其语法为:
[g|j|J|n|x]<refpoint>
x
用绘图坐标指定参考点,即相对于绘图原点的偏移距离。例如x2.75i/2c
,这种方法类似于使用 -X 和 -Y 选项n
用归一化坐标指定参考点,X方向和Y方向的坐标范围都是0到1。比如n0.2/0.1
g
用数据坐标指定参考点,比如g135W/20N
表示参考点是西经135度北纬20度。当需要将修饰物放在某个特定坐标值时,建议使用该方式j
指定底图的9个 锚点 中的一个作为参考点。与此同时,也设置了修饰物默认使用相同的锚点。比如jBL
指定底图左下角为参考点,同时也指定了修饰物的锚点为BL
,因而底图的左上角将与修饰物的左上角重合,进而导致修饰物位于底图左上角的内部。当需要将修饰物放在底图内部某个角落、某条边的中心或图的中心时,建议使用j
,最常见的是绘制图例。J
与j
类似,也是指定底图的某个 锚点 为参考点。其与j
的区别在于,其同时设置了修饰物默认使用与之镜像相反的锚点。比如JTL
将底图的左上角作为参考点,同时修饰物的锚点是BR
即右下角,因而底图的左上角与修饰物的右下角重合,进而导致修饰物位于底图左上角的外部。当需要将修饰物放在底图的外部时,建议使用J
,最常见的是绘制 colorbar
若未指定使用何种方式,则默认使用 x
指定参考点。
修饰物锚点¶
为底图指定参考点之后,还需要为修饰物指定锚点。修饰物的锚点用 +j<anchor>
来指定。锚点有9个,见 锚点 一节。
在未使用 +j<anchor>
指定锚点的情况下,修饰物的锚点按如下规则取默认值:
- 若使用
j<refpoint>
指定底图参考点,则修饰物锚点与底图锚点相同 - 若使用
J<refpoint>
指定底图参考点,则修饰物锚点使用与底图参考点镜像相反的锚点 - 若使用其他三种指定参考点的方式,对于玫瑰图和比例尺而言,锚点默认为
MC
,其他修饰物锚点默认为BL
修饰物锚点偏移量¶
指定了修饰物锚点后,还可以为为其指定额外的偏移量。尤其是在使用 j
和 J
指定底图参考点时,由于底图只能指定某个锚点作为参考点,因而就需要为锚点指定额外的偏移量以增加定位的灵活性。
可以使用 +o<dx>/<dy>
选项指定参考点的额外偏移量。偏移量为正值表示沿着与指定锚点所使用的对齐代码同一方向作偏移。
比如使用 jTL
指定底图左上角为参考点,同时修饰物的左上角锚点也被选中,此时使用 +o2c/1c
表示将修饰物的左上角锚点向左移动 2 cm、向上移动 1 cm,最后将底图参考点与偏移后的锚点对齐。这一特性常用在绘制图例中。
4.12.2 背景面板¶
解决了修饰物的精确定位后,GMT 还为修饰物设计了背景面板。背景面板是与修饰物相关联的,因而背景面板的位置和大小由修饰物决定。除此之外,背景面板还有一些其他属性。背景面板的属性由 -F
选项的子选项决定:
-F[+c<clearance(s)>][+g<fill>][+i[[<gap>/]<pen>]][+p[<pen>]][+r[<radius>]][+s[<dx>/<dy>/][<fill>]]
+g<fill>
指定面板填充色,默认不填充+p<pen>
绘制面板边框。<pen>
为边框的画笔属性,若不指定<pen>
则默认使用默认使用 MAP_FRAME_PEN 的值+r<radius>
绘制圆角边框,<radius>
为圆角的半径+i<gap>/<pen>
在边框内部绘制一个内边框,<gap>
是内外边框的空白距离(默认值为2p),<pen>
为内边框的画笔属性,比如+i0.1c/thin,dahsed
,默认使用 MAP_DEFAULT_PEN+c<clearance>
设置修饰物与面板之间的空白距离。默认情况下面板的大小由修饰物的大小决定,可以使用该子选项为面板增加额外的尺寸:+c<gap>
为四个方向增加相同的空白距离+c<xgap>/<ygap>
分别为X方向和Y方向指定不同的空白距离+c<lgap>/<rgap>/<bgap>/<tgap>
分别为四个方向指定不同的空白距离
+s<dx>/<dy>/<fill>
下拉阴影区。<dx>/<dy>
是阴影区相对于面板的偏移量,<shade>
是阴影区的颜色,默认值为4p/-4p/gray50
。

图 4.4 GMT修饰物背景面板
左图使用了 -F+glightgreen+r
,右图使用了 -F+p1p+i+s+gwhite+c0.1i