8.4 同じ側に何本もの軸を

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

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

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

# uxyz8.rb


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


id0 = 19911201
nd = 180


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

DCL::uzfact(0.7)
DCL::uzlset('LOFFSET', true)
DCL::grfrm

DCL::grswnd(0.0, nd, 0.0, 100.0)
DCL::grsvpt(0.4, 0.9, 0.3, 0.8)
DCL::grstrn(1)
DCL::grstrf

DCL::ucxacl('B', id0, nd)
DCL::ucxacl('T', id0, nd)
DCL::uxsaxs('B')
DCL::uxaxdv('B', 10.0, 20.0)
DCL::uxsttl('B', 'DAY NUMBER', 0.0)

DCL::uyaxdv('L', 5.0, 10.0)
DCL::uyaxdv('R', 5.0, 10.0)
DCL::uysttl('L', 'CELSIUS SCALE', 0.0)

DCL::uysaxs('L')
DCL::uzrset('YOFFSET', 273.15)
DCL::uzrset('YFACT  ', 1.0)
DCL::uyaxdv('L', 5.0, 10.0)
DCL::uysttl('L', 'KELVIN SCALE', 0.0)

DCL::uysaxs('L')
DCL::uzrset('YOFFSET', 32.0)
DCL::uzrset('YFACT  ', 1.8)
DCL::uyaxdv('L', 10.0, 20.0)
DCL::uysttl('L', 'FAHRENHEIT SCALE', 0.0)

DCL::uxsttl('T', '(LOFFSET=.TRUE.)', 0.0)
DCL::uxmttl('T', 'UXSAXS/UYSAXS', 0.0)

DCL::grcls

program uxyz8

\resizebox{10cm}{!}{\includegraphics{uxyz2/uxyz8.eps}}
uxyz8.rb: frame1
\fbox{\parbox{14.75cm}{\fbox{\parbox{14.5 cm}{\vspace{1em}\begin{center}\par......x/doc/misc1/gaiyou/file.tex)を御覧下さい.\par }\end{center}\vspace{1em}}}}}