第7章 グラフ内のテキスト

第7章 グラフ内のテキスト

テキストボックス

余白

fig.text(
    ...,
    pen = <pen>,
    fill = <fill>
    clearance = '<余白の大きさ>',
    ...,
)

fig.textメソッドのclearance引数に余白の大きさを与える(図*※相互参照無効*). ただし,penまたはfillが用いられている場合のみ有効.

角を丸める

fig.text(
    ...,
    pen = <pen>,
    fill = <fill>
    clearance = '+tO',
    ...,
)

テキストボックスの角を円くできる.clearanceに+tOオプションを指定する.テキストを付加するときに少し雰囲気を変えることができる. なお,デフォルトでは「+to」となっており,これは角を直角にする設定である.

ただしclearance引数が有効になるのはpenまたはfillが指定されているときのみ.

例)余白の設定とボックスの角 出力:図*※相互参照無効*

import pygmt
fig = pygmt.Figure()
fig.basemap(
    region = [-1,1,0,2],
    projection = 'X4c/4c',
    frame = 'agf',
)
fig.text(
    x = 0,
    y = 1.5,
    text = "clearance = '1p'",
    pen = '0.5p,black',
    fill = 'white',
    clearance = '1p'
)
fig.text(
    x = 0,
    y = 1,
    text = "clearance = '3p'",
    pen = '0.5p,black',
    fill = 'white',
    clearance = '3p'
)
fig.text(
    x = 0,
    y = 0.5,
    text = "clearance = '3p+tO'",
    pen = '0.5p,black',
    fill = 'white',
    clearance = '3p+tO',
)
fig.show()
テキストボックスの余白設定.

テキストボックスの余白設定.

線に沿ったテキスト

参考) GMT公式マニュアル

テキストを直線や曲線に沿って配置できる. テキストが線より長い場合はテキストが表示されないので注意. 加えて文字の位置の自由度が低く,好きな位置に文字を配置しにくい.

普通の曲線をプロットするときと同じように線のデータを与え, styleに’q’で始まる設定を指定する. qは"\underline{q}uoted line"の頭文字のようだ. 線を消して曲線上に並べたテキストだけ書くこともできるし, 線とテキストが重ならないようにテキストの位置をずらすこともできる. 等値線のラベルと同様の処理のようだ.

書き方はちょっとややこしい.qの後にテキスト配置方法やテキスト情報の入力方法(テキストファイルで与えるか,直接与えるか)などの設定を入力し,そのあと「:」で区切って「+」で始まるオプションを入力する.個人的によく使いそうだと思うオプションは次の通り:

controlling algorithm:

  • d: ここで指定した間隔ごとにテキストを設置する.狭くしすぎるとテキストが重なってしまう.
  • n: 一番楽に使えそう.線上にテキストを配置する数を指定.これを1にすると線の中心にテキストが追加される.2以上なら繰り返し同じテキストが等間隔に配置される.
  • N: N1なら終点に,N-1なら始点に「テキストの左端」がくるようにテキストが配置される.N2なら線の両端に「文字の中心」がくるように2つのテキストが配置される.+jオプションで文字列のどの位置を線の端に合せるかを指定可能.+vオプションをつけるとテキストが表示されなかったりエラーで停止するので注意.

オプション:

  • +l: これでテキストを指定.テキストファイルを与えないなら必須.
  • +v: テキストを曲線に沿わせる.これをつけないとテキストはまっすぐに配置される.
  • +i: 線を透明にしてテキストだけ表示する.線は不要で文字だけ表示したいならこれ.
  • +w: よくわからないが曲がり具合の判定に使う点の数?+vを使ったときに文字の間隔がおかしいときなどにこれをいじると良くなったりする.デフォルトは10.
  • +f: 文字サイズや色の指定.例:+f10p,black
  • +j: 文字を線に揃える位置.上端を線にそろえるとか.左:L,右:R,上:T,下:B.例:+jMC, +jMT.
  • +n: テキストの位置を平行移動.+vとの併用不可.Nとの併用もできないようだ.x方向で線に沿った方向,y方向で線に直交する方向の移動量を指定する.例:+n0/10p
  • +a: テキストのアングル.線に沿う方向なら指定不要.90にすると線に直交.
  • +e: テキストが最前面に描画されるようにしてくれる.
  • +u: テキストの後に加える文字を指定.(単位など)
  • +=: テキストの前に加える文字を指定.
  • +g: テキストボックスの色.
  • +p: テキストボックスの枠.ex.) +p1p,black
  • +o: テキストボックスの角を円くする.+vとの併用不可.
  • +r: これよりも曲がりが急な部分にテキストを表示しない.デフォルトは0なのでどんだけ急に曲がっているところにもテキストが配置される.

例)コサイン曲線に沿ったテキスト.出力:図*※相互参照無効*

import pygmt
import numpy as np

x = np.linspace(-5,5,100)
y = np.cos(x)

fig = pygmt.Figure()
fig.plot(
    x = x,
    y = y,
    style = 'qn1:+l"text along cos curve"+v+f10p,red+jMC+gblack@100',
    region = [-5,5,-1.2,1.2],
    projection = 'X8c/3c',
)
fig.basemap(
    frame = 'agf',
)
fig.show()
線に沿ったテキスト

線に沿ったテキスト