第10章 周辺要素
グラフの周囲に付加する要素.
タイトル
fig.basemap(
frame = '+t<title>'
)
basemapなどのframeにて+tオプションで図にタイトルをつけることができる. 空白を含む文字列を与える際はダブルクオーテーション"“で挟む必要があるが, 文字列の変数ならば"“で挟む必要はない.
距離スケールバー
追加と調整
# basemap or coast
map_scale = <オプション>,
box = <背景色や枠線>,
...,
basemapまたはcoastの中で指定することができる.
オプション:
- +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',
)
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=<name>とするだけでは凡例は作成できない. +S<size>でサイズを指定することで凡例が作成できるようになる:
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に与えれば,全体図中に拡大図の範囲を四角形で示すようなこともできる.