何本も軸を描く

最後のプログラム UXYZ8 では, 同じ側に2本以上の座標軸を別の目盛 で描こうという時の実例です.

軸を外側へずらしたい, または, すでに描いた軸の外側にもう一本軸を描きた いというときは, x軸については UXSAXS ルーチンを, y軸について は UYSAXS ルーチンを呼ぶだけです. 引数は, 場所を指定するおなじみ の引数です. これらのルーチンを呼ぶと, 次の軸は内側の軸と重ならない程度 に適度に外側に描かれます. これを何回も使えば, 簡単にいくつもの軸を一つ の側に描かせることができます.

1つの側に複数の軸を描こうとする時, そのためにいちいちウインドウを設定 し直す必要はありません. この例では, y座標のウインドウとしてセ氏温度 で0度から100度の範囲で設定したのですが, 換算の便のためにケルビンやカ氏 の目盛りもあわせて描いています. ウインドウ設定に影響を与えず, 目盛りだ けを変えて複数の座標軸を描きたいときは, オフセット機能を用います. その ためにまず UZLSET ルーチンで内部変数 'LOFFSET'.TRUE. にしておきます. そして, 必要なところで, UZRSET ルーチン で内部変数 'YOFFSET''YFACT' (x軸については 'XOFFSET''XFACT')を設定すると, 目盛の位置が 'YOFFSET' だけ平行移動し, 目盛の間隔が 'YFACT' 倍されます.

axis05.f90
program axis05

  use dcl
  real,parameter :: rlat1=20., rlat2=80., dlat1=5., dlat2=10.
  integer,parameter :: days=180
  type(dcl_date) :: date

    date%year = 1981
    date%month = 12
    date%day = 1

    call DclOpenGraphics()

    call DclSetAxisFactor( 0.7 )
    call DclNewFrame

    call DclSetWindow( 0.0, real(days), rlat1, rlat2 )
    call DclSetViewPort( 0.2, 0.8, 0.4, 0.8 )
    call DclSetTransFunction

    call DclDrawViewPortFrame( 1 )

    call DclShiftAxis( 'b' )
    call DclDrawAxisCalendar( 'b', date, nd=days )
    call DclShiftAxis( 'b' )
    call DclDrawAxis( 'b', 20.0, 10.0 )
    call DclDrawTitle( 'b', 'Day Number', 0.0 )
    call DclShiftAxis( 't' )
    call DclDrawAxisCalendar( 't', date, nd=days )

    call DclShiftAxis( 'l' )
    call DclDrawAxis( 'l', dlat2, dlat1 )
    call DclShiftAxis( 'r' )
    call DclDrawAxis( 'r', dlat2, dlat1 )
    call DclDrawTitle( 'l', 'Latitude', 0.0 )

    call DclDrawTitle( 't', 'DclShiftAxis', 0.0, 2 )

    call DclCloseGraphics

end program


関連リンク