2
1

More than 5 years have passed since last update.

GMT (Generic Mapping Tools) における3次元座標でのテキスト表示

Last updated at Posted at 2018-09-09

当方の計算環境は以下の通り.(2018.10.25 追記)

  • MacBook Pro (Retina, 13-inch, Mid 2014)
  • macOS Mojave
  • GMT 5.4.4

GMT において3次元座標上でテキスト表示を行う方法の紹介です.
以下にサンプル画像を示します.

_gmt_3dtext.jpg

  • 3次元座標上へのテキスト表示は,pstextに -Z オプションを用いて座標指定することにより可能です.pstext — GMT 5.3.2 documentation
  • 3次元プロットの中の任意の位置にテキストを表示する場合,くせ(というか仕様)があるので,座標指定の特性を知っておく必要があるので注意.

サンプル画像描画用スクリプトは以下の通り.スクリプト中に解説を入れたので参考にしてください.

gmt set FONT_ANNOT_PRIMARY 16p
gmt set MAP_ANNOT_OFFSET_PRIMARY 0.3c
gmt set FONT_LABEL 16p
gmt set MAP_LABEL_OFFSET 0.5c
gmt set MAP_TICK_LENGTH_PRIMARY -0.2c

# x軸:-5 / 25 長さ 30m
# y軸:-5 / 55 長さ 60m
# z軸:60 / 75 長さ 15m
# x軸長さ 30m を  8cm にセット
# y軸長さ 60m を 16cm にセット
# z軸長さ 15m を  4cm にセット
rangez=-5/25/-5/55/60/75
scalex=8/16
scalez=4
bax=a5f1
bay=a5f1
baz=a5f1
xlabel="Distance x (m)"
ylabel="Distance y (m)"
zlabel="Distance z (m)"
#ang=150/30
ang=140/30
#ang=30/25

fig=_gmt_3dtext.eps
gmt psbasemap -R$rangez -JX$scalex -JZ$scalez -Bx$bax+l"$xlabel" -By$bax+l"$ylabel" -Bz$baz+l"$zlabel" -BESZnw -p$ang -P -K > $fig
gmt psxyz -R -JX -JZ -G#dddddd -p -O -K << EOT >> $fig
>
-5 -5 60
-5 55 60
-5 55 75
-5 -5 75
EOT
gmt psxyz -R -JX -JZ -G#eeeeee -p -O -K << EOT >> $fig
>
-5 55 60
25 55 60
25 55 75
-5 55 75
EOT
# pstext の中に,オプション -Z を指定することにより,三次元座標の中にテキストを表示できる.
# テキスト表示は x-y 平面上となり,角度 0 ならx軸に並行,角度 90 ならy軸に平行となる.
gmt pstext -R -JX -JZ -Z -F+f+a+j -G#ffffbf -W1 -p -O -K << EOT >> $fig
 0.0  0.0 60 20p,Helvetica-Bold 90 ML EL.60
 0.0  0.0 65 20p,Helvetica-Bold 90 ML EL.65
 0.0  0.0 70 20p,Helvetica-Bold 90 ML EL.70
 0.0  0.0 75 20p,Helvetica-Bold 90 ML EL.75
EOT
gmt pstext -R -JX -JZ -Z -F+f+a+j -p -O -K << EOT >> $fig
0.0  10.0 60 18p 0 BL (x,y,z)=(0,10,60)BL
0.0  20.0 60 18p 0 BL (x,y,z)=(0,20,60)BL
0.0  30.0 60 18p 0 BL (x,y,z)=(0,30,60)BL
0.0  40.0 60 18p 0 BL (x,y,z)=(0,40,60)BL
0.0  50.0 60 18p 0 BL (x,y,z)=(0,50,60)BL
EOT
# x軸長さを 8cm,y軸長さを 16cm にセットしてあるので
# 2次元プロットを行う場合,x軸範囲を 8,y軸範囲を 16 とすれば
# 2 x 2 で線を引けば 2cm 四方の正方形が描ける.
gmt psxy -R0/8/0/16 -JX -Sv0.2+s -W1,#aaaaaa -K -O << EOT >> $fig
0  0 8  0
0  2 8  2
0  4 8  4
0  6 8  6
0  8 8  8
0 10 8 10
0 12 8 12
0 14 8 14
0 16 8 16
 0 0  0 16
 2 0  2 16
 4 0  4 16
 6 0  6 16
 8 0  8 16
EOT
# 作図領域の座標を,x軸で 0 から 1,y軸で 0 から 1 とすれば
# x軸では 8cm が 0 から 1,y軸では 16cm が 0 から 1 に割り振られる.
# したがって,座標 (1,1) は基準点から (8cm, 16cm) の位置を意味する.
# 同様に座標 (2,0.7) は基準点から (16cm, 16cm x 0.7 = 11.2cm) の地点をお見する.
echo '0 0 20p 0 LB Finish(0,0)LB' | gmt pstext -R0/1/0/1 -JX -F+f+a+j -N -O -K >> $fig
echo '0 0.5 20p 0 LT Finish(0,0.5)LT' | gmt pstext -R0/1/0/1 -JX -F+f+a+j -N -O -K >> $fig
echo '0 0.7 20p 0 LT Finish(0,0.7)LT' | gmt pstext -R0/1/0/1 -JX -F+f+a+j -N -O -K >> $fig
echo '2 0.7 20p 0 RT Finish(2,0.7)RT' | gmt pstext -R0/1/0/1 -JX -F+f+a+j -N -O -K >> $fig
echo '1 1 20p 0 RT Finish(1,1)RT' | gmt pstext -R0/1/0/1 -JX -F+f+a+j -N -O >> $fig

# eps を jpg (-Tj) に変換.-A オプションにより余白削除を行う.
for fn in *.eps
do
gmt psconvert $fn -Tj -A
done
rm *.eps

以 上

2
1
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
2
1