13.59 subplot

官方文档:subplot
简介:设置子图模式

subplot 模块可以将当前纸张分隔成若干个网格区域,每个区域内都可以包含一张单独的子图。

subplot 模块提供了三条命令:

  • subplot begin 用于设置子图的布局
  • subplot set 用于指定当前绘图在哪一个子图中进行
  • subplot end 用于结束子图模式

13.59.1 subplot begin

语法

gmt subplot begin <nrows>x<ncols>
    -F[f|s]<width>/<height>[+f<wfracs>/<hfracs>]
    -A[<autolabel>][+j|J<refpoint>][+c<dx>/<dy>][+g<fill>][+p<pen>][+o<dx>/<dy>][+r][+R][+v]
    [-B<params>]
    [-C<side>/<clearance>[u]]
    [-J<params>]
    [-M<margins>]
    [-R<params>]
    [-S<layout>]
    [-T<title>]

必须选项

<nrows>x<ncols>

指定子图模式下的行数和列数。

每一行的子图数目相同,每一列的子图数目也相同。若需要实现每行有不同的子图数目,你需要多次叠加使用 subplot 模块。注意:你无需在每个子图内都绘图。

-F[f]<width>/<height>[+f<wfracs>/<hfracs>]

指定整张图片的长度 <width> 和宽度 <height>

在这种情况下,会根据整张图片的长宽以及子图的数目自动计算每张子图的尺寸,在计算子图尺寸时会考虑每个子图的刻度线、标记、标签所占据的空间,以及不同子图之间的间隔。整张图的最外圈的刻度线、标记和标签不算在整张图片尺寸之内。

若想要每行或每列的子图具有不同的尺寸,则可以使用 +f 子选项,后面紧跟着一系列逗号分隔的宽度比例和以逗号分隔的高度比例。单个数则表示所有行或列有相同的宽度或高度。

例如,-Ff4i/4i+f3,1/1,2 设置了整张图的宽度和高度均为4英寸,其中,第一列的宽度是第二列的三倍,而第二行的高度则是第一行的两倍。默认是所有行以及列的尺度是相同的。

-Fs<widths>/<heights>

通过指定每个子图的长宽间接指定图片尺寸。

在这种情况下,整张图片的尺寸由每个子图的尺寸以及刻度线、标记、标签所占据的空间和子图之间的间隙共同决定,但最外圈的刻度线、标记、标签所占据的空间不算在整张图的尺寸之内。

为了给每行或每列指定不同的子图尺寸,可以加上一系列以逗号分隔的宽度,然后再加上一个斜杠,并加上一系列以逗号分隔的高度。单个数则表示所有行或列有相同的宽度或高度。

例如,-Fs2i,3i/3i 设置了第一列为2英寸宽,第二列为3英寸宽,所有列的高度均为3英寸。需要注意,宽度值或高度值的数目必须是一个或者与行数/列数相匹配。

对于地理地图而言,每张子图的高度由地图区域以及投影方式决定。有两个选择:(1) 同时指定 -R-J,并利用其计算每张子图的高度,所有的子图必须共享相同的研究区域和投影方式,且你必须指定一个0高度;(2)不断尝试并修改子图的高度以得到最佳的绘图布局。

可选选项

-A[<autolabel>][+j|J<refpoint>][+c<dx>/<dy>][+g<fill>][+p<pen>][+o<dx>/<dy>][+r][+R][+v]

为每个子图自动指定编号。

<autolabel> 可以是一个数字或字母,也可以在数字或字母的一侧或两侧加上括号,其设置了左上角第一张子图的编号,而其余子图则按照递增的顺序依次编号。

可以加上子选项以指定编号的更多属性:

  • +j|J<refpoint> 指定子图编号在底图上的位置,默认值为 TL,即编号位于底图的左上角。+j+J 分别适用于子图编号位于底图内部和底图外部的情况。
  • +p<pen> 绘制编号的文本框的轮廓
  • +g<fill> 为编号的文本框填充颜色
  • +c<dx>[/<dy>] 设置编号与其文本框轮廓间的距离,默认值为 FONT_TAG 的15%
  • +o<dx>[/<dy>] 设置编号与 +j|J 指定的参考位置之间的偏移量,默认值为 FONT_TAG 的20%
  • +r 表示用小写罗马数字编号
  • +R 表示用大小罗马数字编号
  • +v 表示沿着垂直列方向依次增加编号,默认沿着水平行方向依次增加
-B<params>
同时设置所有子图的 -B 选项,参考 -B 选项
-C<side>/<clearance>[u]

设置子图的某个边与图件边沿的额外的空白量。这些空白量独立于子图之外,可以用于绘制比例尺、添加额外的文字等。

其中 <side> 可以取 e|w|s|n 分别代表东西南北四条边。该选项可以重复多次,对不同边分别设置不同的间距。在 subplot begin 中使用该选项,则其对所有子图均有效。

-J<params>
设置底图投影方式,见 投影方式
-M<margins>

除了子图的刻度、标注和标签之外,子图之间的额外间隔。

<margins> 可以有三种情况:

  1. 取一个值,表示子图的四个方向的间隔
  2. 取两个值,表示子图的水平和垂直方向的间隔,两个值之间用斜杠分隔
  3. 取四个值,表示子图的左右下上四个方向的间隔,四个值之间用斜杠分隔
-R<region>
设置所有子图的共同研究区域
-SC[b|t][+l<label>]

设置共享X轴的所有子图的X轴属性。

若使用 -SC 则一列中只有第一行子图的顶部X轴和最后一行子图的底部X轴有标注。

  • -SCb 一列中只有最后一行子图的底部X轴有标注
  • -SCt 一列中只有第一行子图的顶部X轴有标注
  • +l<label> 用于给子图的共享X轴添加标注
-SR[l|r][+l<label>][+p][+t]

设置共享Y轴的所有子图的Y轴属性。

若使用 -SR 则一行中只有第一列子图的左边Y轴和最后一列子图的右边Y轴有标注。

  • -SRl 一行中只有第一列子图的左边Y轴有标注
  • -SRr 一行中只有最后一列子图的右边Y轴有标注
  • +l<label> 用于给子图的共享Y轴添加标注
  • +p 设置所有标注与Y轴平行,此时可能需要使用 -C 选项为长水平标注增加更多的空间
  • +t 为每一行子图的标题保留额外空间
  • +tc 仅为第一个子图的标题保留额外空间
-T<heading>

设置整张图的总标题,标题文字的属性由 FONT_HEADING 控制。

每张子图各自的标题可以用 -B-S 选项控制。

13.59.2 subplot set

subplot set 通过指定子图的行号和列号以激活某个特定的子图,接下来的所有绘图命令将只在该子图内进行绘制。子图的行号和列号均从1开始算起。 subplot set 的功能与 -c 选项 类似但其更加灵活。

若使用 subplot set 但未指定子图的行和列,则GMT会自动激活“下一个”子图面板。例如,对于一个2行2列的图而言,每次使用 subplot set 而不指定子图行和列,则按照行优先顺序依次激活子图 1,1 -> 1,2 -> 2,1 -> 2,2。若 subplot begin 中使用了 -A+v 选项,则按照列优先顺序依次激活子图 1,1 -> 2,1 -> 1,2 -> 2,2

需要注意,子图中所有的投影方式均不能指定绘图宽度,因为底图的尺寸完全由子图的大小和 -R 选项指定的研究区域决定。在需要指定绘图宽度的地方,需要用问号 ? 代替绘图宽度。

语法

gmt subplot set [<row>,<col>] [-A<fixedlabel>] [-C<side>/<clearance>[u]]

可选选项

<row>,<col>
要激活的子图所在的行和列。行列均从1开始数起。
-A<fixedlabel>
设置当前子图的编号,而忽略 subplot begin-A 选项的设置的自动编号。但该选项只能修改编号的字符串,其余属性(如位置、文本框)等均只能继承自 subplot begin-A 选项。
-C<side>/<clearance>[u]

设置当前子图的某个边与图件边沿的额外的空白量。这些空白量独立于子图之外,可以用于绘制比例尺、添加额外的文字等。

其中 <side> 可以取 e|w|s|n 分别代表东西南北四条边。该选项可以重复多次,对不同边分别设置不同的间距。该选项会覆盖 subplot begin-C 选项的效果。

13.59.3 subplot end

该命令用于结束当前的子图模式。

在结束子图模式时,会自动对所有子图进行编号,保存整个图片的长和宽到临时文件中,这使得 -X-Y 选项可以使用 wh 针对整个图片的原点进行偏移。与此同时,会将绘图的原点重置回之前的原点位置。

13.59.4 示例

生成一个2X2的子图图片:

gmt begin panels pdf
  gmt subplot begin 2x2 -Fs3i -M5p -A -SCb -SRl -Bwstr
    gmt subplot set
    gmt basemap -R0/80/0/10
    gmt subplot set
    gmt basemap
    gmt subplot set
    gmt basemap
    gmt subplot set
    gmt basemap
  gmt subplot end
gmt end