8.3 好みの場所に好みの軸を

座標軸は 'B', 'T', 'L', 'R' で指定する 以外のところにも描くことができます. また, 軸の表現もいろいろ変えられま す(uxyz7).

# uxyz7.rb


require "narray"
require "numru/dcl"
include NumRu
include Math


#-- graph ---
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gropn iws

DCL::grfrm

DCL::grswnd(1990.0, 1995.0, -2.0, 2.0)
DCL::grsvpt(0.2, 0.8, 0.3, 0.7)
DCL::grstrn(1)
DCL::grstrf

DCL::uzrset('UYUSER', 0.0)
DCL::uzlset('LBTWN', true)
DCL::uxsfmt('(I4)')
DCL::uxaxdv('U', 0.25, 1.0)
DCL::uzlset('LBTWN', false)
DCL::uxsttl('U', 'YEAR', 1.0)

DCL::uziset('INNER', -1)
DCL::uysfmt('(F4.1)')
DCL::uyaxdv('L', 0.25, 1.0)
DCL::uysttl('L', 'S.O.Index', 0.0)

DCL::uxmttl('T', 'UXAXDV/UYAXDV', 0.0)

DCL::grcls

program uxyz7

\resizebox{10cm}{!}{\includegraphics{uxyz2/uxyz7.eps}}
uxyz7.rb: frame1

座標軸をウインドウ・ビューポートの境界線以外のところへ描きたいときには, 場所をあらわす引数としてユーザー指定の座標軸 'U' を指定します. この例では uxaxdvuxsttl のメソッド(元サブルーチン)で 'U' を 指定して, 座標軸とタイトルを描いています. 具体的にどこに軸を描くかは, uzrset ルーチンを用いて, x軸については内部変数 'UYUSER' の値を, y軸については内部変数 'UXUSER' の値を指定ます. この例 の場合, 'UYUSER' を0.0と指定することによって, U-座標系でみたy座標の値が0.0のところにユーザー指定のx軸を描きます.

また, この例のx軸では, 目盛と目盛の間にラベルを描いてみました. uzlset ルーチンで内部変数 'LBTWN'.true. とすれば, 目 盛と目盛の間にラベルを描きます. ただし, 注意すべきことは, ほかの座標軸 を描くときにもこの設定が影響しますので, ラベルを描き終ったら .false.(初期値)に戻しておく必要があります.

さらに, 17行めの uxsfmt ルーチンによってフォーマットを '(I4)' と陽に指定しています. これは, デフォルトでは有効数字3桁で数値 を表現するフォーマットとなっているためで, 4桁目までちゃんと表現する必 要があるときには, このようにユーザーがフォーマットを指定しなければなり ません.

y軸では, uziset で内部変数 'INNER' を-1に設定して, 目 盛を外向きにつけました. (初期値は1で, 内向きに目盛をつけます.) また, uysfmt ルーチンによってフォーマットを '(F4.1)' と陽に指定し ました.