subplot

官方文件:subplot
簡介:管理和設置子圖模式

subplot 模塊可以將當前紙張分隔成若干個網格區域,每個區域內都可以包含一張單獨的子圖。

subplot 模塊提供了三條指令:

  • subplot begin 進入子圖模式,並設置子圖的佈局
  • subplot set 用於指定接下來的繪圖操作在哪一個子圖中進行
  • subplot end 用於結束子圖模式

在子圖模式中,需要注意如下幾點:

  • -X-Y 選項無法在子圖模式中使用,可以使用 -C 選項作爲替代
  • 在使用 -J 選項時,可以使用 ? 來指定地圖寬度或比例尺,此時,GMT會根據子圖的大小自動確定最合適的地圖尺寸
  • 對於笛卡爾投影,若想要X和Y軸共用相同的比例尺,則可以使用 -Jx?

subplot begin 語法

gmt subplot begin nrowsxncols -F[f|s]width/height[+fwfracs/hfracs][+cdx/dy][+gfill][+ppen][+wpen] [ -A[autolabel][+j|Jrefpoint][+cdx/dy][+gfill][+ppen][+odx/dy][+r][+R][+v] ] [ -C[side]/clearance[u] ] [ -Bparameters ] [ -Jprojection ] [ -Mmargins ] [ -Rregion ] [ -Slayout ] [ -Ttitle ] [ -V[level] ] [ -X[a|c|f|r][xshift[u]] ] [ -Y[a|c|f|r][xshift[u]] ] [ --PAR=value ]

必須選項

nrowsxncols

指定子圖的行數和列數。

每一行和每一列均有相同的子圖數目。注意:你無需在每個子圖內都繪圖。

-F[f|s]width/height[+fwfracs/hfracs][+cdx/dy][+gfill][+ppen][+wpen]

指定圖片的尺寸。有兩種方式:

  • -Ff: 直接指定整張圖片的尺寸
  • -Fs: 指定單個子圖的尺寸

除此之外,還可以爲整張圖加上背景色和邊框:

  • +ppen: 爲整張圖加上背景矩形邊框
  • +wpen: 繪製子圖區域之間的水平和垂直分割線
  • +gfill: 爲整張圖的背景矩形填充顏色
  • +cdx/dy: 設置背景矩形與整張圖之間的額外空白
-F[f]width/height[+fwfracs/hfracs]

指定整張圖片的寬度 width 和高度 height

這種情況下,GMT會根據整張圖片的尺寸以及子圖的數目自動計算每張子圖的尺寸。在計算子圖尺寸時會考慮每個子圖的刻度線、標註、標籤所佔據的空間,以及不同子圖之間的間隔。整張圖的最外圈的刻度線、標記和標籤不算在整張圖片尺寸之內。

默認所有行和列的尺寸都是相同的。若想要子圖的每一行具有不同的高度,或者子圖的每一列具有不同的寬度,則可以使用 +f,後面緊跟着一系列逗號分隔的寬度比例和以逗號分隔的高度比例。單個數則表示所有行或列有相同的寬度或高度。

例如,對於一個2x2的子圖,使用-Ff12c/12c+f3,1/1,2 則表示

  • 整張圖的寬度和高度均爲12釐米
  • 第一列佔3個寬度,第二列佔1個寬度
  • 第一行佔1個高度,第二行佔2個高度
-Fswidths/heights

通過指定每個子圖的寬度和高度間接指定圖片尺寸。

在這種情況下,整張圖片的尺寸由每個子圖的尺寸以及刻度線、標註、標籤佔據的空間和子圖之間的間隙共同決定,但最外圈的刻度線、標記、標籤所佔據的空間不算在整張圖的尺寸之內。

默認所有行和列的尺寸都是相同的。若想要給每行或每列指定不同的子圖尺寸,可以加上一系列以逗號分隔的寬度,然後再加上一個斜槓,並加上一系列以逗號分隔的高度。單個數則表示所有行或列有相同的寬度或高度。

例如,對於一個2x2的子圖,使用 -Fs4c,8c/4c 則表示第一列爲4釐米寬,第二列爲8釐米寬,所有列的高度均爲4釐米高。注意,寬度值或高度值的數目必須是一個或者與行數/列數相匹配。

對於地理地圖而言,每張子圖的高度由地圖區域 -R 以及投影方式 -J 決定。有兩個選擇:(1) 指定子圖高度爲0,並同時指定 -R-J,利用其計算每張子圖的高度,但要求所有子圖必須共享相同的研究區域和投影方式;(2) 不斷嘗試並修改子圖的高度以得到最佳的繪圖佈局。

可選選項

-A[autolabel][+j|Jrefpoint][+cdx/dy][+gfill][+ppen][+odx/dy][+r][+R][+v]

爲子圖自動添加編號。

autolabel 可以是單個數字或字母,也可以在數字或字母的一側或兩側加上括號。其設置了左上角第一張子圖的編號,而其餘子圖則按照遞增的順序依次編號。默認值爲 a)

注解

括號在Unix Shell中有特殊含義,可以將其用單引號括起來,即 '(a)'

加上子選項可以指定編號的更多屬性:

  • +j|Jrefpoint: 指定編號在子圖中的位置,默認值爲 TL,即編號位於子圖的左上角。+j+J 分別適用於子圖編號位於子圖內部和外部的情況
  • +odx[/dy] 設置子圖編號相對於 +j|J 指定的參考位置間的額外偏移量,默認值爲 FONT_TAG 的20%
  • +ppen 爲子圖編號加上文本框
  • +gfill 爲子圖編號的文本框填充顏色
  • +cdx[/dy]: 設置子圖編號與文本框輪廓間的距離,默認值爲 FONT_TAG 的15%
  • +r 表示用小寫羅馬數字編號
  • +R 表示用大小羅馬數字編號
  • +v 表示沿着垂直列方向依次增加編號,默認沿着水平行方向依次增加
-Bparameters (more …)
设置底图边框和轴属性
-C[side]/clearance[u]

設置子圖區域內某個邊的額外空白量。這些額外的空白量可以用於繪製比例尺、添加額外的文字等。

side 可以取 e w s n 分別代表東西南北四條邊;也可以取 xy,分別表示設置東西或南北方向兩條邊的空白;若不指定 side,則表示同時設置四條邊上的空白量。

該選項可以重複多次,對不同邊分別設置不同的間距。

subplot begin 中該選項對所有子圖均有效,而 subplot set 中使用該選項則僅對當前子圖有效。

注解

在子圖模式下不能使用 -X-Y,可以使用 -C 作爲替代。

-Jprojection (more …)
设置地图投影方式。
-Mmargins

相鄰子圖之間的額外空白

margins 可以有三種情況:

  1. 取一個值,表示子圖四個方向的空白 [默認值爲 FONT_ANNOT_PRIMARY 規定的字體大小]
  2. 取兩個值,表示子圖的水平和垂直方向的空白,兩個值之間用斜槓分隔
  3. 取四個值,表示子圖的左右下上四個方向的空白,四個值之間用斜槓分隔
-Rxmin/xmax/ymin/ymax[+r][+uunit] (more …)
指定数据范围
-SC[b|t][+llabel][+t]

設置一列中的所有子圖共用X軸

當一列所有子圖共用X軸時,默認只有第一行子圖的頂部(t) X軸和最後一個子圖的底部(b)X軸有標註。

  • -SCb 一列中只有最後一行子圖的底部X軸有標註
  • -SCt 一列中只有第一行子圖的頂部X軸有標註
  • +llabel 爲共用的X軸添加標註
  • +t 爲每個子圖的標題預留空間
  • +tc 爲第一行的所有子圖的標題預留空間
-SR[l|r][+llabel][+p][+t]

設置一行中所有子圖共用Y軸

當一行所有子圖共用X軸時,默認只有第一列子圖的左邊Y軸和最後一列子圖的右邊Y軸有標註。

  • -SRl 一行中只有第一列子圖的左邊Y軸有標註
  • -SRr 一行中只有最後一列子圖的右邊Y軸有標註
  • +llabel 爲共用的Y軸添加標註
  • +p 設置所有標註與Y軸平行
-Theading

設置整張圖的總標題,標題文字的屬性由 FONT_HEADING 控制。

每張子圖各自的標題可以用 -B-S 選項控制。

-V[level] (more …)
设置 verbose 等级 [c]

-X[a|c|f|r][xshift[u]]

-Y[a|c|f|r][yshift[u]] (more …)
移动绘图原点
-^-
显示简短的帮助信息,包括模块简介和基本语法信息(Windows下只能使用 -
-++
显示帮助信息,包括模块简介、基本语法以及模块特有选项的说明
-? 或无参数
显示完整的帮助信息,包括模块简介、基本语法以及所有选项的说明
--PAR=value
临时修改GMT参数的值,可重复多次使用。参数列表见 gmt.conf

subplot set

subplot set 通過指定子圖的行列號或索引號以激活某個特定的子圖,接下來的所有繪圖命令將只在該子圖內進行繪製。其與 -c 選項 功能基本一致。

子圖的行號、列號、索引號均從0開始算起。因而對於MxN的子圖而言,行號的取值爲0到M-1,列號的取值爲0到N-1,索引號的取值則爲0到(M*N-1)。

若使用 subplot set 但未指定子圖的行列號或索引號,則GMT會自動激活“下一個”子圖。例如,對於一個2行2列的圖而言,每次使用 subplot set 而不指定子圖行和列,則按照行優先順序依次激活子圖 0,00,11,01,1。若 subplot begin 中使用了 -A+v 選項,則按照列優先順序依次激活子圖 0,01,00,11,1

subplot set 語法

gmt subplot set [ row,col|index ] [ -Afixedlabel] [ -Cside/clearance[u] ] [ -V[level] ]

可選選項

row,col | index

指定要激活的子圖的行列號或索引號。行列號、索引號均從0開始算起。

若不指定子圖行列號或索引號,則自動激活“下一個”子圖。

-Afixedlabel

設置當前子圖的編號,忽略 subplot begin-A 選項設置的自動編號。

這一選項可以用於臨時修改單個子圖的編號,但該選項只能修改編號字符串,其餘屬性(如位置、文本框)等均只能繼承自 subplot begin-A 選項。

-Cside/clearance[u]

設置子圖的某個邊的額外空白量。這些額外的空白量可以用於繪製比例尺、添加額外的文字等。

side 可以取 e w s n 分別代表東西南北四條邊。該選項可以重複多次,對不同邊分別設置不同的間距。 subplot begin 該選項對所有子圖均有效,而 subplot set 中使用該選項則僅對當前子圖有效。

注解

在子圖模式下不能使用 -X-Y,可以使用 -C 作爲替代。

subplot end

該命令用於結束當前的子圖模式。

在結束子圖模式時,其會進行如下操作:

  • 對所有子圖進行編號
  • 將繪圖原點重置回之前的原點位置
  • 更新歷史信息,設置爲線性投影,並給出整張圖的大小,使得用戶可以使用 -DJ 方式放置colorbar等。

subplot end 語法

gmt subplot end [ -V[level] ]

示例

下面的示例展示瞭如何設置一張2x2佈局的圖,並使用不同的方式指定要激活的子圖。不同的設置方式的效果是相同的,用戶在使用時可根據需求選擇最直觀最簡便的方式。

方法1: 使用 subplot set 指定子圖行列號

注意行列號均從0開始。

gmt begin map png,pdf
    gmt subplot begin 2x2 -Fs5c/2.5c -A
    gmt subplot set 0,0
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set 0,1
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set 1,0
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set 1,1
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot end
gmt end
../_images/subplot-gmtplot-0.png

方法2: 使用 subplot set 指定子圖索引號

注意子圖索引號從0開始:

gmt begin map png,pdf
    gmt subplot begin 2x2 -Fs5c/2.5c -A
    gmt subplot set 0
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set 1
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set 2
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set 3
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot end
gmt end

方法3: 使用 subplot set 但不指定子圖號

每次使用 subplot set 但不指定子圖行列號或索引號,則會自動激活“下一個”子圖:

gmt begin map png,pdf
    gmt subplot begin 2x2 -Fs5c/2.5c -A
    gmt subplot set
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot set
    gmt basemap -R0/10/0/10 -Baf
    gmt subplot end
gmt end

方法4: 使用 -c 選項

-c 選項 的功能與 subplot set 類似,可以用於激活指定的子圖。其後可以接子圖行列號或索引號,也可以只使用 -c 自動激活下一個子圖:

gmt begin map png,pdf
    gmt subplot begin 2x2 -Fs5c/2.5c -A
    gmt basemap -R0/10/0/10 -Baf -c
    gmt basemap -R0/10/0/10 -Baf -c
    gmt basemap -R0/10/0/10 -Baf -c
    gmt basemap -R0/10/0/10 -Baf -c
    gmt subplot end
gmt end

下面展示瞭如何設置一個2x2的圖,並設置共用X和Y軸:

gmt begin panels png,pdf
  gmt subplot begin 2x2 -Fs10c/5cc -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
../_images/subplot-gmtplot-1.png

下面的示例展示瞭如何繪製一個不完全規則的子圖。這個示例中,實際上只使用了子圖0、2、3,而第一張圖同時佔據了子圖0和1的空間。在這種情況下,GMT的自動編號功能無法正確編號,因而需要在 subplot set 中爲每個子圖單獨指定編號。

gmt begin map pdf,png
    gmt subplot begin 2x2 -Fs5c/3c -A -M0

    gmt subplot set 0
    gmt basemap -R0/20/0/10 -JX11.2c/3c -Baf -BWSen

    gmt subplot set 2 -A'(b)'
    gmt basemap -R0/20/0/10 -JX? -Baf -BWSen

    gmt subplot set 3 -A'(c)'
    gmt basemap -R0/20/0/10 -JX? -Baf -BWSen

    gmt subplot end
gmt end
../_images/subplot-gmtplot-2.png

相關模塊

begin, clear, docs, end, figure, inset