比較的よく使う gmt set
GMT5 では,gmt set でのコマンドが GMT4 からかなり変更されているので,自分が比較的よく使うものをページの先頭に置いておきます.
グラフを作成するときなどは,これをコピーして GMT コマンドのスクリプトに貼り付けています.
GMT5 のドキュメント GMT_Docs '5.7 Incompatibilities between GMT 5 and GMT 4' に対比表が載っています.
gmt set FONT_ANNOT_PRIMARY 12
gmt set MAP_ANNOT_OFFSET_PRIMARY 0.3c
gmt set FONT_LABEL 12p
gmt set MAP_LABEL_OFFSET 0.5c
gmt set MAP_TICK_LENGTH_PRIMARY -0.2c
世界地図(1):各種図法
|
|
|
Hemisphere map |
Orthographic projection |
|
|
|
|
Mercator projection |
Cylindrical equidistant projection |
|
|
|
|
Cylindrical equal-area projections |
Miller Cylindrical projection |
Cylindrical stereographic projections |
|
|
|
Hammer projection |
Mollweide projection |
Winkel Tripel projection |
|
|
|
Robinson projection |
Eckert IV projection |
Eckert VI projection |
世界地図(2):テキスト描画
|
fig_map_trip.png |
凡例描画
-
GMT は'pslegend'という凡例作成のコマンドを持っていますが,管理人はそれをうまく使えません.
そこで凡例描画のためのバッチファイルを作成するawkスクリプトを作りました.
スクリプトファイル名は'awk_klegend.awk'です.
-
このawkスクリプトでは,出力ファイル名は変数として'$fig'としています.
作図用スクリプトの中で,'fig=xxx.eps'のように変数名をセットするのを忘れないでください.
-
GMTの '-O' オプションが最終行に書かれているため,'awk_klegend.awk'により作成されたスクリプトは,
作図用スクリプトの最終行で実行する必要があります.
-
'awk_legend.awk' への入力書式は以下のとおり.
01| xlen $ ylen $ strP $ dx $ dy
02| ipt $ scl $ llen
03| strTX[NR] $ strLW[NR] $ strSS[NR] $ strSG[NR] $ strSW[NR]
04| ......... $ ......... $ ......... $ ......... $ .........
05| ......... $ ......... $ ......... $ ......... $ .........
$ | : 入力データ用セパレータ |
xlen, ylen | : 基グラフの幅と高さ (オプション '-JXwidth/height' における width と height) |
strP | : 凡例の位置 |
bl | : グラフ内左下(bottom left in graph area) |
br | : グラフ内右下(bottom right in graph area) |
tr | : グラフ内右上(top right in graph area) |
tl | : グラフ内左上(top left in graph area) |
ot | : グラフ外右上(top right out of graph area) |
or | : グラフ外右下(bottom right out of graph area) |
|
dx, dy | : 凡例領域外枠と基グラフのx軸・y軸までの距離 |
ipt | : フォントサイズ (pt) |
scl | : 1フォントの幅と高さの比 (width/height) |
llen | : 凡例内の線の長さ(文字数で指定) |
strTX[NR] | : 凡例の文字 |
strLW[NR] | : 線種 ('-W' オプションに続く値). 不要であれば '---' |
strSS[NR] | : 記号の種類と大きさ ('-S' オプションに続く値). 不要であれば '---' |
strSG[NR] | : 記号塗りつぶしの色 ('-G' オプションに続く値). 不要であれば '---' |
strSW[NR] | : 記号輪郭線指定 (記号描画のための'-W' オプションに続く値). 不要であれば '---' |
|
fig_marker.png |
グラフ描画 (片対数・2軸グラフ)
|
|
fig_gra_slog.png | fig_gra_2axes.png |
矢印と画像事例
2点を結ぶ直線を引く (-Sv0.2+s -W1)
-Sv+sで,2点を結ぶ直線を描画します.線種は-Wオプションで指定します.
-Sv の次の数値 0.2 は矢印の長さです.ここでは無意味ですが,入れておく必要があるようです.
下の例では実線が描画されます.
gmt psxy -R -JX -Sv0.2+s -W1 -K -O << EOT >> $fig
-4 2 4 2
-4 -2 4 -2
-5.414 1.414 -5.414 2.600
EOT
2点を結ぶ一点鎖線を引く (-Sv0.2+s -W1,15_5_5_5:0)
-Sv+sで,2点を結ぶ直線を描画します.線種は-Wオプションで指定することにより実線,破線など線種を変えることができます.
下の事例では,一点鎖線が描画されます.
gmt psxy -R -JX -Sv0.2+s -W1,15_5_5_5:0 -K -O << EOT >> $fig
0 -4 0 4
-6.3 0 6.3 0
-4 -2.5 -4 2.5
4 -2.5 4 2.5
EOT
片矢印 (-Sv0.2+s+e+a45)
-Sv に,s:始点と終点座標を与える,e:終点方向矢印,a45:矢印の角度を加えて片矢印を描画します.
線種は,-Wオプションにて指定します.
下にコマンド事例を示します.
gmt set MAP_VECTOR_SHAPE 0
gmt psxy -R -JX -Sv0.2+s+e+a60 -W2 -G0 -O -K << EOT >> $fig
-4 2 -2 2
4 2 2 2
-5.414 1.414 -6.828 0
5.414 1.414 6.828 0
EOT
両矢印 (-Sv0.2+s+b+e+a45)
-Sv に,s:始点と終点座標を与える,b:始点方向矢印,e:終点方向矢印,a45:矢印の角度を加えて両矢印を描画します.
片矢印との違いは,b と e で2方向の矢印を指定することです.
線種は,-W オプションにて指定します.下にコマンド事例を示します.
gmt set MAP_VECTOR_SHAPE 1
gmt psxy -R -JX -Sv0.2+s+b+e+a45 -W0.5 -G0 -O -K << EOT >> $fig
-5.414 2.6 0 2.6
0 2.6 4 2.6
-4 0 -5.414 -1.414
0 -4 -5.414 1.414
EOT
作図例とスクリプト
|
fig=fig_torus1.eps
gmt set FONT_LABEL 12p
gmt set MAP_TICK_LENGTH_PRIMARY 0c
echo "-4 0 2" | gmt psxy -R-8/8/-4/4 -JX8/4 -SC -W2 -P -K > $fig
echo " 4 0 2" | gmt psxy -R -JX -SC -W2 -O -K >> $fig
gmt psxy -R -JX -Sv0.2+s -W1 -K -O << EOT >> $fig
-4 2 4 2
-4 -2 4 -2
-5.414 1.414 -5.414 2.600
EOT
gmt psxy -R -JX -Sv0.2+s -W1,15_5_5_5:0 -K -O << EOT >> $fig
0 -4 0 4
-6.3 0 6.3 0
-4 -2.5 -4 2.5
4 -2.5 4 2.5
EOT
gmt set MAP_VECTOR_SHAPE 0
gmt psxy -R -JX -Sv0.2+s+e+a60 -W2 -G0 -O -K << EOT >> $fig
-4 2 -2 2
4 2 2 2
-5.414 1.414 -6.828 0
5.414 1.414 6.828 0
EOT
awk 'BEGIN{pi=3.141592654;for(i=0;i<=330;i=i+30){x1=4+1.2*cos(i/180*pi);y1=1.2*sin(i/180*pi);\
x2=4+2*cos(i/180*pi);y2=2*sin(i/180*pi);print x1,y1,x2,y2}}' | gmt psxy -R -JX -Sv0.2+s+e+a60 -W2 -G0 -O -K >> $fig
gmt set MAP_VECTOR_SHAPE 1
gmt psxy -R -JX -Sv0.2+s+b+e+a45 -W0.5 -G0 -O -K << EOT >> $fig
-5.414 2.6 0 2.6
0 2.6 4 2.6
-4 0 -5.414 -1.414
0 -4 -5.414 1.414
EOT
gmt pstext -R -J -F+f+a+j -N -K -O << EOT >> $fig
-2.707 3.0 10p,Helvetica 0 MC r@-0@-
2 3.0 10p,Helvetica 0 MC b
-6.828 1.0 10p,Helvetica 0 MC N@~j@~
-1.8 1.5 10p,Helvetica 0 MC N@~j@~
1.8 1.5 10p,Helvetica 0 MC N@~j@~
6.828 1.0 10p,Helvetica 0 MC N@~j@~
-5 -0.5 10p,Helvetica 0 MC a
-3.3 -1.3 10p,Helvetica 0 MC r
-0.5 -3.0 10p,Helvetica 0 MC @~j@~
4.5 0.5 10p,Helvetica 0 MC p
EOT
echo "0 0" | gmt psxy -R0/1/0/1 -J -Sp -N -K -O >> $fig
echo "1 1" | gmt psxy -R0/1/0/1 -J -Sp -N -O >> $fig
テキストの表示 (pstext)
コマンド pstext を用いてテキストを表示する.指定は面倒だが表示の自由度は高いし便利.
コマンド例
gmt pstext -R0/1/0/1 -J -F+f+a+j -N -K -O << EOT >> $fig
0.50 0.75 10p 0 LM Tunnel radius
EOT
データ書式
テキスト描画では,x座標・y座標・テキストは必須として,-F+f+a+jに対し以下のようにデータとして入力します.
x | : x座標 |
y | : y座標 |
f | : フォント(サイズは必須),デフォルトフォントは Helvetica |
a | : 角度 |
j | : 座標に対する表示位置 |
s | : 表示するテキスト |
表示位置は以下のアルファベットの組み合わせを指定します.
TL(top-left) | TC(top-center) | TR(top-right) |
ML(middle-left) | MC(middle-center) | MR(middle-right) |
BL(bottom-left) | BC(bottom-center) | BR(bottom-right) |
シンボル(ギリシャ文字),上付き,下付きなどのマークアップの文字列を下に示します.
Code | Effect |
@~ | シンボルフォント(ギリシャ文字)の始まりと終わり |
@+ | 上付き文字の始まりと終わり |
@- | 下付き文字の始まりと終わり |
@# | 小さい大文字の始まりと終わり |
@_ | 下線の始まりと終わり |
@%fontno% | フォントの変更; @%% で元のフォントに戻す |
@:size: | フォントサイズの変更; @:: で元のフォントサイズに戻す |
@;color; | フォント色の変更; @;; で元の色に戻す |
@! | これに続く2文字を合成 |
@@ | @マークの表示 |
アルファベットとギリシャ文字の関係は下に示すとおりです.
矢印
fig=fig_gmt_arrow.eps
gmt set MAP_VECTOR_SHAPE 0
echo 1 0 1 2 | gmt psxy -R0/10/0/3 -JX10/3 -Sv0.5+s+e+a30 -W2 -G0 -P -K > $fig
echo 2 0 2 2 | gmt psxy -R -JX -Sv0.5+s+e+a45 -W2 -G255 -O -K >> $fig
echo 3 0 3 2 | gmt psxy -R -JX -Sv0.5+s+e+a60 -W2 -O -K >> $fig
gmt set MAP_VECTOR_SHAPE 1
echo 4 0 4 2 | gmt psxy -R -JX -Sv0.5+s+e+a30 -W2 -G0 -O -K >> $fig
echo 5 0 5 2 | gmt psxy -R -JX -Sv0.5+s+e+a45 -W2 -G0 -O -K >> $fig
echo 6 0 6 2 | gmt psxy -R -JX -Sv0.5+s+e+a60 -W2 -G0 -O -K >> $fig
gmt set MAP_VECTOR_SHAPE 1.5
echo 7 0 7 2 | gmt psxy -R -JX -Sv0.5+s+e+a30 -W1 -G0 -O -K >> $fig
echo 8 0 8 2 | gmt psxy -R -JX -Sv0.5+s+e+a45 -W1 -G0 -O -K >> $fig
echo 9 0 9 2 | gmt psxy -R -JX -Sv0.5+s+e+a60 -W1 -G0 -O >> $fig
気象グラフ
|
|
Kuala Lumpur | Tokyo |
|
|
Maebashi | Komagane |
ハッチによる塗りつぶし
パハーンのみならず,前景色と背景色を明示すること.
流況曲線など
流況曲線と水車使用水量
まず,水車使用水量を,棒グラフ用コマンドを用いて描画し,次に流量曲線を重ね書きで描画します.
作図用スクリプトは以下のとおり.
#Flow Duration Curve
fig=fig_QQ.eps
gmt set FONT_ANNOT_PRIMARY 14
gmt set FONT_LABEL 14
gmt set MAP_TICK_LENGTH_PRIMARY 0.0c
rangeSW=0/100/0/100
rangeNE=0/366/0/100
scale=12/10
afgS=a10f1g10
afgW=a10f5g10
labelS='Probability of exceedance (%)'
labelW='Discharge (m@+3@+/s)'
col0=#0000ff
col1=#cf9fff
col2=#ffff9f
gmt psbasemap -R$rangeNE -JX$scale -Bx -By -P -K > $fig
gawk '{FS=","}NR>=2{print $1-0.5,$3+$4}' inp_Q.csv | gmt psxy -R -J -Sb1ub0 -W0.5,${col2} -G${col2} -K -O >> $fig
gawk '{FS=","}NR>=2{print $1-0.5,$3}' inp_Q.csv | gmt psxy -R -J -Sb1ub0 -W0.5,${col1} -G${col1} -K -O >> $fig
gmt psbasemap -R$rangeSW -JX$scale -Bx$afgS+l"$labelS" -By$afgW+l"$labelW" -BWSne -K -O >> $fig
gawk '{FS=","}NR>=2{print $1/365*100,$2}' inp_Q.csv | gmt psxy -R -J -W2,${col0} -K -O >> $fig
echo '25 22.5 12 0 MC Discharge for #2' | gmt pstext -R -J -F+f+a+j -N -K -O >> $fig
echo '25 7.5 12 0 MC Discharge for #1' | gmt pstext -R -J -F+f+a+j -N -K -O >> $fig
gmt set MAP_VECTOR_SHAPE 1
gawk '{FS=","}NR==60{print $1/365*100+10,$2+10,$1/365*100,$2}' inp_Q.csv | gmt psxy -R -J -Sv0.2+s+e+a30 -W0.5 -G0 -K -O >> $fig
gawk '{FS=","}NR==60{print $1/365*100+10,$2+10,14,0,"ML Available Inflow"}' inp_Q.csv | gmt pstext -R -J -F+f+a+j -N -K -O >> $fig
echo '0 0' | gmt psxy -R -J -Sp -O >> $fig
総合効率曲線(一般的な2次元グラフ)
一般的な2次元グラフとして,発電機・水車の総合効率を描画します.
この事例では,「gmt set MAPTICKLENGTH_PRIMARY -0.2c」により,目盛線をグラフ領域の内側に引くようにしているので,以下のコマンドにより,軸と軸数値および軸ラベルの位置を調整します.
gmt set MAP_ANNOT_OFFSET_PRIMARY 0.4c
gmt set MAP_LABEL_OFFSET 0.4c
作図用スクリプトは以下のとおり.
#Efficiency
fig=fig_EF.eps
gmt set FONT_ANNOT_PRIMARY 14
gmt set MAP_ANNOT_OFFSET_PRIMARY 0.4c
gmt set MAP_LABEL_OFFSET 0.4c
gmt set FONT_LABEL 14
gmt set MAP_TICK_LENGTH_PRIMARY -0.2c
rangeSW=4/16/0.5/1.0
scale=12/10
afgS=a2f0.5g1
afgW=a0.1f0.01g0.05
labelS='Turbine Discharge (m@+3@+/s)'
labelW='Combined Efficiency'
col0=#0000ff
gmt psbasemap -R$rangeSW -JX$scale -Bx$afgS+l"$labelS" -By$afgW+l"$labelW" -BWSne -Y2 -K -P > $fig
gawk '{print $1,$2}' inp_eff.txt | gmt psxy -R -J -W2,${col0} -K -O >> $fig
echo '0.97 0.97 12 0 TR Francis turbine (350rpm)' | gmt pstext -R0/1/0/1 -J -F+f+a+j -N -K -O >> $fig
echo '4 0.5' | gmt psxy -R -J -Sp -O >> $fig
画像ファイルの形式変換
WordやPowerPointに貼りこむため,画像のファイル形式を変換します.
ImageMagickを用いて,ディレクトリ内の全epsファイルを余白を調整してpng形式に変換するコマンドを以下に示します.
mogrify -trim -density 300 -bordercolor 'transparent' -border 10x10 -format png *.eps
作成されたpng画像