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}}}}}