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

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

      PROGRAM UXYZ7

      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL SGPWSN
      READ (*,*) IWS

      CALL GROPN( IWS )
      CALL GRFRM

      CALL GRSWND( 1990., 1995., -2.0, 2.0 )
      CALL GRSVPT(   0.2,   0.8,  0.3, 0.7 )
      CALL GRSTRN( 1 )
      CALL GRSTRF

      CALL UZRSET( 'UYUSER', 0. )
      CALL UZLSET( 'LBTWN', .TRUE. )
      CALL UXSFMT( '(I4)' )
      CALL UXAXDV( 'U', 0.25, 1. )
      CALL UZLSET( 'LBTWN', .FALSE. )
      CALL UXSTTL( 'U', 'YEAR', 1. )

      CALL UZISET( 'INNER', -1 )
      CALL UYSFMT( '(F4.1)' )
      CALL UYAXDV( 'L', 0.25, 1. )
      CALL UYSTTL( 'L', 'S.O.Index', 0. )

      CALL UXMTTL( 'T', 'UXAXDV/UYAXDV', 0. )

      CALL GRCLS

      END
PROGRAM UXYZ7

\resizebox{10cm}{!}{\includegraphics{uxyz2/uxyz7.eps}}
uxyz7.f: 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)' と陽に指定し ました.