GMT6入门教程(7)单行、图中图、子图和多图模式
1.单行模式
原文地址:GMT单行模式 — GMT中文手册
“单行模式”:当绘图只需要一个GMT命令时,可省略 gmt begin 和 gmt end,只需要在绘图命令后加上 -format figname 即可。
完整模式命令:
gmt begin GlobalMap png,pdf
gmt coast -Rg -JH15c -Gpurple -Baf -B+t"My First Plot"
gmt end show
单行模式命令:
gmt coast -Rg -JH15c -Gpurple -Baf -B+t"My First Plot" -pdf,png GlobalMap
2.图中图模式
原文地址:GMT图中图模式 — GMT中文手册
模块:inset
用法:图中图模式以 inset begin 开始,并以 inset end 结束。
解释:使用 inset begin 进入图中图模式,其作用是在纸张上规划出一个矩形区域,并将绘图原点移动到该矩形区域的左下角。接下来的所有绘图命令均只在该区域内进行操作。当使用 inset end 结束图中图模式时,绘图原点会自动恢复到图中图模式之前的位置,且所有设置参数都将回到之前的状态。
2.1用矩形框标记研究区域
命令:
gmt begin inset-map png,pdf
gmt coast -R139.2/140.5/34.8/36 -JM12c -Baf -BWSne -W2p -A1000 -Glightbrown -Sazure1 --FORMAT_GEO_MAP=dddF
gmt inset begin -DjBL+w3c/3.6c+o0.1c -F+gwhite+p1p
gmt coast -R129/146/30/46 -JM? -EJP+glightbrown+p0.2p -A10000
# 使用 -Sr+s 绘制矩形区域
echo 139.2 34.8 140.5 36 | gmt plot -Sr+s -W1p,blue
gmt inset end
gmt end show
解释:
- inset begin 定义了小图的位置位于大图左下角(-DjBL),小图区域的宽度为3厘米,高度为3.6厘米(+w3c/3.6c),并且相对大图左下角偏移0.1厘米(+o0.1c)。同时还设置了小图区域的背景色为白色(+gwhite),并绘制了小图区域的边框(+p1p)。
- 在小图区域内,使用 coast 模块绘制了日本全图,小图投影参数为 -JM?,其中 ? 表示根据 inset begin 中 -D 选项指定的宽度自动决定小图宽度。
- 使用 plot 模块的 -Sr+s 选项在小图中绘制了一个对应于大图区域的矩形框,该命令需要输入矩形区域的两个对角顶点的经纬度。
2.2用颜色标记研究区域
命令:
gmt begin inset-example png,pdf
gmt coast -R110E/170E/44S/9S -JM6i -B -BWSne -Wfaint -N2/1p -Gbrown -EAU+gbisque
gmt inset begin -DjTR+w1.5i+o0.15i/0.1i -F+gwhite+p1p+c0.1c
gmt coast -JG120/30S/? -Rg -Bg -Wfaint -Gbrown -EAU+gbisque -A5000
gmt inset end
gmt end show
解释:
- inset begin 定义了小图的位置位于大图右上角(-DjTR),小图区域宽度为 1.5英寸(+w1.5i)
- 在小图内部在需要指定地图宽度的地方使用了 ? 让GMT自动帮我们决定小图的宽度。
3.子图模式
原文地址:GMT子图模式 — GMT中文手册
两种方式可以绘制多子图:
- 常规方式:在绘图时使用 -X 和 -Y 选项 手动移动每个子图的原点
- 现代方式:使用 subplot 模块提供的子图模式来布局和管理多子图
现代方式更加简洁易用,建议使用现代方式。仅当图片非常复杂或不规则时,才推荐使用常规方式。
模块:subplot
3.1子图布局
subplot begin 用于设计子图的布局、尺寸以及其它属性。
相邻子图之间的间隔则可以用 -M 选项控制。
subplot set 用于激活指定的子图,接下来的所有绘图命令都将在该子图内进行绘制。
GMT中可以通过 行号,列号 或者 索引号 (即第几个子图)的方式来指定子图。
行号、列号和索引号,均从0开始起算。因而对于一个N行M列的子图布局而言,行号为0到N-1,列号为0到M-1,索引号为0到N*M-1。
命令:gmt subplot begin 2x3 -Fs5c/3c
解释:定义了一个2行3列的子图布局。-Fs5c/3c 则指定了每个子图区域的宽度为5厘米,高度为3厘米。
命令:gmt subplot set 1,0 或 gmt subplot set 3
解释:1,0即为行号和列号,3为索引号
使用 subplot end 退出子图模式,命令:gmt subplot end
3.2第一张子图
命令:
gmt begin map png,pdf
gmt set FONT_TAG 15p FONT_HEADING 20p MAP_HEADING_OFFSET 0p
gmt subplot begin 2x2 -Fs5c/3c -A -M0.2c/0.1c -T"My Subplot Heading"
gmt subplot set 0
gmt basemap -R0/10/0/10 -JX? -Baf -BWSen
gmt subplot set 1
gmt basemap -R0/20/0/10 -JX? -Baf -BWSen
gmt subplot set 2
gmt basemap -R0/10/0/20 -JX? -Baf -BWSen
gmt subplot set 3
gmt basemap -R0/20/0/20 -JX? -Baf -BWSen
gmt subplot end
gmt end show
解释:
- 调整子图编号的大小(FONT_TAG)、总标题文字大小(FONT_HEADING)以及总标题相对于底图的偏移量(MAP_HEADING_OFFSET)
- 用 subplot begin 定义了一个2行2列(2x2)的子图布局,每个子图区域宽5厘米高3厘米(-Fs5c/3c)
- -A: 对每个子图进行自动编号abcd
- -M0.2c/0.1c: 调整相邻子图之间的空白距离,X方向间隔为0.2厘米,Y方向间隔为0.1厘米
- -T”My Subplot Heading”: 为整张图加上一个总标题
- 在子图模式内,使用 subplot set 0 的方式依次激活每个子图。
- 在每个子图内绘图时,我们使用了线性投影方式 -JX?。通常需要指定图片的宽度或高度,这里使用了 ? 让GMT根据子图区域的大小自动帮我们选择最合适的子图宽度。
3.3共用X/Y轴
命令:
gmt begin map png,pdf
gmt set FONT_TAG 15p FONT_HEADING 20p MAP_HEADING_OFFSET 10p
gmt subplot begin 2x2 -Fs5c/3c -A -M0.2c/0.2c -T"My Subplot Heading" -SRl -SCb -BWSrt
gmt basemap -R0/10/0/10 -JX? -c
gmt basemap -R0/20/0/10 -JX? -c
gmt basemap -R0/10/0/20 -JX? -c
gmt basemap -R0/20/0/20 -JX? -c
gmt subplot end
gmt end show
解释:
- -SRl 表示一行内(Row)的子图共用Y轴,且只在左边(l)轴显示标注,
- -SCb 表示一列内(Column)的子图共用X轴,且只在底部(b)轴显示标注。
3.4复杂布局
命令:
gmt begin complex-subplot png,pdf
gmt subplot begin 2x2 -Fs5c/3c -A
gmt subplot set 0 -A'(a)'
gmt basemap -R0/10/0/10 -JX11.75c/3c -Baf -BWSen
echo 5 5 TEXT | gmt text -JX11.75c/3c
gmt subplot set 2 -A'(b)'
gmt basemap -R0/5/0/5 -JX? -Baf -BWSen
gmt subplot set 3 -A'(c)'
gmt basemap -R0/5/0/5 -JX? -Baf -BWSen
gmt subplot end
gmt end show
在一个2行2列的子图布局中绘制了三张子图,其中第一张子图占据了第一行。
在绘制三个底图时,后两个底图均使用了 -JX?,因而GMT会自动根据子图区域的大小确定子图的尺寸;而为了使得第一张子图占据两个子图区域的空间,我们使用了 -JX11.75c/3c 来人工指定其子图宽度,其中子图宽度11.75厘米是需要人工调整的。
由于我们跳过了第二个子图区域,自动标签功能会将三个子图依次编号为a、c、d,这显然不是我们想要的,因而我们使用了 -A’(a)’ 选项手动设置子图编号。需要注意的是,由于小括号在Bash中有特殊含义,所以这里 (a) 两边加了单引号以避免Bash对小括号进行解释。
4.多图模式
原文地址:GMT多图模式 — GMT中文手册
模块:figure
可以在 gmt begin 和 gmt end 中多次使用 gmt figure 来创建新图,或激活已有的图。
命令:
gmt begin
# 创建 Fig1 并在 Fig1 中绘图
gmt figure Fig1 png
gmt basemap -R0/10/0/10 -JX10c -Baf
# 创建 Fig2 并在 Fig2 中绘图
gmt figure Fig2 png
gmt basemap -R0/5/0/5 -JX10c -Baf
# 切换回 Fig1,并绘制圆圈
gmt figure Fig1
echo 5 5 | gmt plot -Sc1c -W2p
# 切换回 Fig2,并绘制三角形
gmt figure Fig2
echo 1 2 | gmt plot -St1c -W1p
gmt end show
使用 figure 模块在一个脚本中指定了两张图,并不断在两张图之间来回切换,最终会生成两张图,第一张图中在底图中绘制了圆圈,第二张图中则在底图中绘制了三角形。