当方の計算環境は以下の通り.(2018.10.25 追記)
- MacBook Pro (Retina, 13-inch, Mid 2014)
- macOS Mojave
- GMT 5.4.4
GMT において3次元座標上でテキスト表示を行う方法の紹介です.
以下にサンプル画像を示します.
- 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
以 上