GMTで説明図を描く

# 作図例とスクリプト

<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/01e456d6-fdd4-49a9-ced7-65426110dc1c.png" width=50%>


```
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
```

<table>
<tr><td>x	</td><td>: x座標</td></tr>
<tr><td>y	</td><td>: y座標</td></tr>
<tr><td>f	</td><td>: フォント(サイズは必須)，デフォルトフォントは Helvetica</td></tr>
<tr><td>a	</td><td>: 角度</td></tr>
<tr><td>j	</td><td>: 座標に対する表示位置</td></tr>
<tr><td>s	</td><td>: 表示するテキスト</td></tr>
</table>

表示位置は以下のアルファベットの組み合わせを指定します．

<table>
<tr><td>TL(top-left)</td><td>TC(top-center)</td><td>TR(top-right)</td></tr>
<tr><td>ML(middle-left)</td><td>MC(middle-center)</td><td>MR(middle-right)</td></tr>
<tr><td>BL(bottom-left)</td><td>	BC(bottom-center)</td><td>BR(bottom-right)</td></tr>
</table>

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

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

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

<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/c50c6e1d-953b-a19c-24c9-f8067a774849.png" width=50%>

```
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
```


## 矢印の形

<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/a2e4b8ee-bb59-ee16-eba5-28cf27e82f61.png" width=50%>

```
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
．．．．．．．．
```


<img src="https://qiita-image-store.s3.amazonaws.com/0/129300/d103fc5d-7dea-1954-812e-b250e0312645.png" width=50%>