#author("2022-06-24T16:34:40+09:00","default:Miyashita","Miyashita") #author("2022-06-27T14:21:30+09:00","default:Miyashita","Miyashita") *GMT Library Wrapper [#h60e4ad1] Julia の中で GMT が使える.詳しくは [[GMT.jl>https://github.com/GenericMappingTools/GMT.jl]] へ.~ 基本的に #codeprettify(lang-julia){{ # julia usnig GMT: GMT GMT.gmt("foobar") }} は #codeprettify{{ # shell (bashなど) gmt foobar }} と同じ.~ GMT.jl を使う前に,GMT のライブラリが参照できるように startup.jl でパスを通すか LD_LIBRARY_PATH で参照可能になっている必要がある.~ これについては [[startup>../startup]] に記載.~ ~ ~ ** libgdal, libgeos 関連のプレコンパイルエラー [#lfa7f056] ある時から GMT に libgdal, libgeos に関連するエラーが出るようになった. #codeprettify(lang-julia){{ ERROR: LoadError: failed processes: Process(`ldd /raid/miyashita/local_gnu/src/gmt-6.1.1/lib64/libgmt.so`, ProcessExited(1)) [1] Process(`grep libgdal`, ProcessExited(1)) [1] }} どうパスを設定しても,libgmt.so の中に libgdal と libgeos の依存関係が関連付けされていないと,エラーを返すようになっている.~ GMT をソースからインストールして使っている人は,インストール時に必ず geos と gdal を有効にしてインストールしないといけない.~ ~ ~ **出力ファイル [#m457d354] GMT.jl v0.9.0 時点.~ bash 上では #codeprettify{{ # shell gmt pscoast -JX12/6 -Rg -Ggray -P > foobar.ps }} のように出力ファイルの名前を明示しないといけないが,Julia の中では, #codeprettify(lang-julia){{ # julia GMT.coast(J="X12/6", R="g", G=:gray) }} のように,ファイル名を書かなくてもPostScriptファイルに記述される.~ この場合,描いた図がどこにあるかというと, #codeprettify(lang-julia){{ # julia GMT.fname_out(Dict(),false) ("/tmp/GMTjl_tmp.ps", "", "ps", true, true) }} の一つ目の戻り値 "/tmp/GMTjl_tmp.ps" にある. 確認段階ではこのファイルを見ればOK.~ 描画コマンドの後のキーワード引数に show=true (show=1) を入れることで,このファイルを実行すると同時に表示できる. #codeprettify(lang-julia){{ GMT.coast(J="X12/6", R="g", G=:gray, show=true) }} ~ ファイルとして出力したい場合は #codeprettify(lang-julia){{ GMT.coast(J="X12/6", R="g", G=:gray, savefig="tmp.ps") }} で保存するファイル名を指定するか, #codeprettify(lang-julia){{ GMT.coast(J="X12/6", R="g", G=:gray, fmt="EPS") }} のように保存形式を指定してコピーする.~ ~ ~ **軸ラベルやタイトルにスペース挿入 [#w708f80c] B オプションを使って GMT のシンタックス通りに軸ラベルを入れようとすると #codeprettify(lang-julia){{ GMT.basemap(J="X10", R="0/10/0/10", B="xaf+l\"x (m)\" yaf+l\"y (m)\" neSW") }} となるが,これだと x と (m) の間にある空白をうまく処理してくれない.~ GMT.jl では,B オプションに軸ラベルやタイトルは入れずにキーワード引数 xlabel, ylabel を使うとよい. #codeprettify(lang-julia){{ GMT.basemap(J="X10", R="0/10/0/10", B="af neSW", xlabel="x (m)", ylabel="y (m)") }}