LoginSignup
6
10

More than 5 years have passed since last update.

GMTで説明図を描く

Last updated at Posted at 2016-07-23

作図例とスクリプト

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

主なコマンド

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

テキストの表示 (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)

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

Code Effect
@~ シンボルフォント(ギリシャ文字)の始まりと終わり
@+ 上付き文字の始まりと終わり
@- 下付き文字の始まりと終わり
@# 小さい大文字の始まりと終わり
@_ 下線の始まりと終わり
@%fontno% フォントの変更; @%% で元のフォントに戻す
@:size: フォントサイズの変更; @:: で元のフォントサイズに戻す
@;color; フォント色の変更; @;; で元の色に戻す
@! これに続く2文字を合成
@@ @マークの表示

アルファベットとギリシャ文字の関係は下に示すとおりです.

fig=fig_text.eps
gmt pstext -R4/36/0/5 -JX15/3 -F+f+a+j -N -P << EOT > $fig
4 1 12p 0 LM @@~a@@~
4 2 12p 0 LM alphabet
4 3 12p 0 LM @@~A@@~
4 4 12p 0 LM ALPHABET
10 1 12p 0 MC @~a@~
11 1 12p 0 MC @~b@~
12 1 12p 0 MC @~c@~
.....
EOT

矢印の形

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

ハッチングパターン

echo  0.5 -0.5 | psxy -R0/12/-15/1 -JX12/15 -SS1 -Gp200/1:F0/0/0B- -P -K > fig_gmt_pat0.eps
echo  1.5 -0.5 | psxy -R -J -SS1 -GP200/1:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  2.5 -0.5 | psxy -R -J -SS1 -Gp200/2:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  3.5 -0.5 | psxy -R -J -SS1 -GP200/2:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  4.5 -0.5 | psxy -R -J -SS1 -Gp200/3:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  5.5 -0.5 | psxy -R -J -SS1 -GP200/3:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  6.5 -0.5 | psxy -R -J -SS1 -Gp200/4:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  7.5 -0.5 | psxy -R -J -SS1 -GP200/4:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  8.5 -0.5 | psxy -R -J -SS1 -Gp200/5:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo  9.5 -0.5 | psxy -R -J -SS1 -GP200/5:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo 10.5 -0.5 | psxy -R -J -SS1 -Gp200/6:F0/0/0B- -K -O >> fig_gmt_pat0.eps
echo 11.5 -0.5 | psxy -R -J -SS1 -GP200/6:F0/0/0B- -K -O >> fig_gmt_pat0.eps
........

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10