第12章 周辺要素
グラフの周囲に付加する要素.
タイトル
タイトル
fig.basemap(
frame = ['+t<title>']
)
basemapなどのframeにて+tオプションで図にタイトルをつけることができる.
(v0.12.0追記)
かつてはタイトルにスペースが含まれる場合は
「"」または「'」で挟む必要があったが,
現在は空白を含む際もクォーテーションで挟む必要はなくなったようである.
サブタイトル
サブタイトルはタイトルの下に表示される.
fig.basemap(
frame = ['+t<title>+s<サブタイトル>']
)
(v0.12.0記)
+tオプションでタイトルを指定したうえで
+sオプションを続けることでサブタイトルを追加できる.
タイトルがない状態で+sでサブタイトルだけ与えてもプロットされない.
例)タイトルとサブタイトルの追加.
import pygmt
rgn = [-1,1,-1,1]
prj = "M4c"
fig = pygmt.Figure()
with pygmt.config(
FONT_TITLE = "10p,Helvetica-Bold,black",
FONT_SUBTITLE = "8p,Helvetica,grey50",
):
fig.basemap(
region = rgn,
projection = prj,
frame = ["afg","+tTitle+sSubtitle"],
)
fig.show()

タイトルの位置が図からやや遠いので 少し下に移動させたいが,その方法はわからない.
距離スケールバー
追加と調整
# basemap or coast
map_scale = <オプション>,
box = <背景色や枠線>,
...,
basemapまたはcoastの中で指定することができる.
Note
オプション:
- +j: justify. 左右位置からKRM, 上下位置からTBCのいずれかを選び,グラフ内での位置を指定する.(ex. +jMT)
- +w: width. スケールで示す距離.(ex. +w100k)
- +f: fancy. 縞々スケールにする.
- +l: label.スケール上部にラベルを付ける.(ex. +llabel)
- +u: unit. +wの単位に基づき,スケールの数字に単位をつける.
- +c: どの緯度 (経度) におけるスケールを示すかを指定する.
図--も参照.
太さ
with pygmt.config(
MAP_SCALE_HEIGHT = <太さ>
):
...
この設定項目によって,with構文内のメソッドで追加するスケールの高さ(分厚さ)を指定できる.
例)出力:図--
import pygmt
fig = pygmt.Figure()
with pygmt.config(
MAP_SCALE_HEIGHT = '5p',
FONT = '8p',
):
fig.basemap(
region = [0,10,0,10],
projection = 'M4c',
frame = 'agf',
map_scale = 'jMC+w500k+f+c5N+o0/-1.5c+u+l"scale at 5@.N"',
)
fig.show()

カラーバー
追加
fig.colorbar(
...,
)
frame=でラベルやアノテーションを設定. position=で場所や方向を指定する. デフォルトではx軸が縦向きになることに注意.
+wでカラーバーの長さを指定できるが,この値を負にするとグラフの軸と同様カラーバーの向きを反転させられる.
+hを付加するとカラーバーの向きを横向きにできる. 例)
fig.colorbar(
frame = ['xa5','x+ldepth[km]'],
position='JML+o5c/-0.1c+w-7.8c',
)
Note
frame引数でのオプション:
-
+l: label.
他もbasemapなどで使うframeと共通でagf等が使える. position引数でのオプション:
-
+j: justify. 左右位置からKRM, 上下位置からTBCのいずれかを選び,グラフ内での位置を指定する.(ex. +jMT)
- +w: width. 「+w<長さ>/<太さ>」の形で使用.カラーバーの長さと太さ.
- +e: これを付けると,カラーバーの両端に三角が付く.さらに数字を加えると三角の大きさを指定できる.
frameとpositionの引数で各項目を調整する. +wで長さのみならず太さも指定できる.また+eでカラーバーの両端に三角を付けられる. このように調整方法が距離スケールバーとはやや異なるので注意.
凡例
fig.colorbar(
frame = ['xa5','x+ldepth[km]'],
position='JML+o5c/-0.1c+w-7.8c',
)
自動で凡例を作成する
fig.plot(
……
label = <凡例の名前>,
)
fig.legend(
position = '<position>+l<凡例の行間>',
box = '<線の太さなど>'
)
それまでにプロットした点などに「label=」で凡例名を記した後,legend()を用いる.boxは凡例を囲む線の特徴や背景色を指定できる.
「position=」の「+l」オプションで凡例の行間隔を指定できる.行間が狭くて文字や記号が重なってしまう場合や,その逆の場合に用いると良い.例えばマグニチュードの凡例を円の大きさで与えている場合,デフォルトだと大きなマグニチュードの凡例が他の凡例と重なってしまう.そこで+lで行間を広くとることで重複を回避できる.
……
fig.plot(
data = r'..\..\Data\Locations\obs2019.gmt',
style = 'i'+str(msize),
pen = '1,black',
color = 'orange@20',
label = '2019. 3.21-2019. 5.10',
# projection = prj,
# region = rgn
)
……
fig.legend(
position = 'JTL+o0.2c/-2c+l1.5',
box = '+p3'
)
sizeが変数の点の凡例(自動)
label='<name>+S<size>'
plot()のlabel=を用いて自動的に凡例を作る場合,
plot()の中でsize=が変数で与えられていると単純にlabel= for imag in range(minmag,maxmag+1):
# print(imag)
sz = 0.05 + 0.01 * 2**imag
fig.plot(
x=[361],
y=[181],
size = [sz],
style = 'c',
pen = '0.5p,blue',
color = 'blue@90',
label = 'M'+str(imag) + '+S'+str(sz),
verbose = 'e'
)
fig.legend(
position = 'JML+o1c+l2',
box = 'i0.5p+p0.5p'
)
差し込み地図
pygmt.Figure.inset()
inset()の中でinsetの場所や背景色などを指定する.公式マニュアルではこの中でprojectionをできているが,実際にやるとうまくいかなかったのでwith中のcoastなどで指定したら動いた.
withの中で新しくfigを置く必要はない.
with fig.inset(
position = 'jBR+w'+str(isize)+'c+o-'+str(isize*0.85)+'c/0c',
# box = '+pblack+gwhite',
# margin = 0,
# region = insrgn,
# projection = 'B135/35/33/44/6c'
):
fig.coast(
# dcw="JP+glightbrown+p0.2p",
# area_thresh=10000,
region = insrgn,
projection = insprj,
shorelines = '0.25',
land = 'lightgrey',
water = 'white',
borders = [1,2]
# resolution = 'f'
)
rectangle = [[rgn[0],rgn[2],rgn[1],rgn[3]]]
fig.plot(
data = rectangle,
style = 'r+s',
pen = '3,red',
color = 'red@100',
region = insrgn,
projection = insprj,
)
例のようにrectangleを定義してplotのdataに与えれば,全体図中に拡大図の範囲を四角形で示すようなこともできる.