WANtaroHP (Mac.GMT5)

比較的よく使う 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):各種図法

FilenameDescription
a_map_world.txt世界地図

png png
Hemisphere map Orthographic projection
png png
Mercator projection Cylindrical equidistant projection
png png png
Cylindrical equal-area projections Miller Cylindrical projection Cylindrical stereographic projections
png png png
Hammer projection Mollweide projection Winkel Tripel projection
png png png
Robinson projection Eckert IV projection Eckert VI projection


世界地図(2):テキスト描画

FilenameDescription
a_map_trip.txt地図・移動軌跡描画GMTコマンド

png
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' オプションに続く値). 不要であれば '---'

FilenameDescription
awk_klegend.awk凡例描画用awkスクリプト
a_legend_sample.txt凡例描画GMTコマンド
inp_legend_ex.txt凡例描画用入力データサンプル
legend.txt凡例描画用スクリプト(temporary)

png
fig_marker.png


グラフ描画 (片対数・2軸グラフ)

FilenameDescription
a_gra.txtGMTコマンド

png png
fig_gra_slog.pngfig_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:矢印の角度を加えて両矢印を描画します. 片矢印との違いは,be で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

作図例とスクリプト

png

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  y  f  a  j  s
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)

シンボル(ギリシャ文字),上付き,下付きなどのマークアップの文字列を下に示します.

CodeEffect
@~ シンボルフォント(ギリシャ文字)の始まりと終わり
@+ 上付き文字の始まりと終わり
@- 下付き文字の始まりと終わり
@# 小さい大文字の始まりと終わり
@_ 下線の始まりと終わり
@%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

png




ハッチによる塗りつぶし

パハーンのみならず,前景色と背景色を明示すること.

FilenameDescription
a_gmt_pat0.txtGMTコマンド

png


流況曲線など

流況曲線と水車使用水量

まず,水車使用水量を,棒グラフ用コマンドを用いて描画し,次に流量曲線を重ね書きで描画します.

作図用スクリプトは以下のとおり.

#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画像

fig_2d_QQ.png fig_2d_EF.png



inserted by FC2 system