画像の保存
Contents
画像の保存#
以下の例を考えましょう.
import pygmt
fig = pygmt.Figure()
fig.coast(
projection = 'N138/12c',
region = (128, 146, 30, 46),
shorelines = 'default,black',
area_thresh = 100,
resolution = 'f',
land = '249/243/202',
water = '190/220/250',
map_scale = '142.5/32/32/400',
frame = ['WSen+tFigure', 'xafg', 'yafg']
)
savefig メソッド#
PyGMTの基本 で紹介したように,もっとも簡単に画像を保存するには,以下のように savefig
メソッドを用います.
fig.savefig('fig/map-by-savefig.png')
このように出力した画像をそのまま表示したのが以下です.show
メソッドで表示したものとほぼかわりません.
ファイル種別はファイル名の拡張子で自動的に判断されます.上記のpng
のほか,画像としてはpdf
, jpg
, bmp
, tif
, eps
が使えます.たとえば以下のようにするとPDFで保存できます.
fig.savefig('fig/map-by-savefig.pdf')
savefig
メソッドは,デフォルトでは画像の描画範囲ギリギリまで余白を切り落とします.場合によっては,描画された最外部がわずかに切り落とされてしまうこともあるようです.以下のようにcrop
オプションをつけることで,この問題を回避できます.
ここではその効果をはっきり確認するため,あえて大きめの余白をとってみましょう.
fig.savefig('fig/map-by-savefig-crop.png', crop='5c')
たしかに周りに余白が作られていることがわかります.
Danger
savefig
メソッドのマニュアルには,crop
オプションはBool
(True
or False
)をとる,と書いてあります.
ところが,crop=False
を指定してみたところ,筆者の環境では処理が終わらなくなってしまいました.上記の例のように,マニュアルに記載がないものの,文字列として余白の大きさをcm単位で指定することで正常に処理されました.
また,出力がpng, jpg, tif形式のときは,デフォルトで anti_alias=True
が仮定されており,画像化するときにアンチエイリアス処理がおこなわれます.アンチエイリアス処理の有無で劇的な変化はないようですが,文字のエッジ部分はやや綺麗になるようです.
そのほか,dpi
オプションに数値を渡すと,画像の解像度を指定できます.デフォルト値はかなり高めです.
KML出力#
面白いところではGoogle Earthなどで表示可能な kml
フォーマットが選べます.ただし,
投影法(
projection
)はX
で,かつ大きさは角度単位(d
)で指定すべきsavefig
の出力ファイル名にディレクトリを含むとうまくいかないframe
を描画すると位置がズレる
という制限があるようです.そこで,上記のスクリプトをKML用に変更してみると,以下のようになります.
fig_kml = pygmt.Figure()
fig_kml.coast(
projection = 'X18d/16d',
region = (128, 146, 30, 46),
shorelines = 'default,black',
area_thresh = 100,
resolution = 'f',
land = '249/243/202',
water = '190/220/250',
map_scale = '142.5/32/32/400'
)
fig_kml.savefig('map.kml')
こうしてできたKMLファイルをGoogle Earthで表示したものが以下のスクリーンショットです.ただし,Google Earthの地形が背景に透けて見えるよう,同アプリ上で透過処理を行いました.
たしかに,PyGMTで作成した海岸線とGoogle Earthの海岸線がよく一致していることが確かめられます.
coast
で地図を描いただけのものをGoogle Earthで表示してもあまり意味はありませんが,地図上のデータプロットがインタラクティブに操作できる地図アプリ上に表示できるのは有用かもしれません.
psconvertメソッド#
savefig
よりももう少し細かい制御ができるのが psconvert
メソッドです.これまで savefig
で指定してきたオプションとほぼ互換なオプションは以下の通りです.下記にある調整は基本的に savefig
メソッドで実現できます.
fig.psconvert(crop='0.5c', # 切り落とし
dpi=300, # 解像度(PDFは不要)
fmt='g', # g: png, f: pdf
prefix='fig/map-by-psconvert', # 拡張子の手前までの名前
anti_aliasing=['g4', 't4'] # これが一番強いアンチエイリアス
)