第10章 周辺要素

第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に与えれば,全体図中に拡大図の範囲を四角形で示すようなこともできる.