次のプログラム uxyz2 は対数座標軸の例です. 対数座標軸の描画は ULPACK が担当しています.
# uxyz2.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(1.0e0, 1.0e5, 1.0e3, 1.0e0) DCL::grsvpt(0.2, 0.8, 0.2, 0.8) DCL::grstrn(4) DCL::grstrf DCL::ulxlog('B', 1, 9) DCL::ulxlog('T', 1, 9) DCL::uxsttl('B', '[X]', 1.0) DCL::ulylog('L', 3, 9) DCL::ulylog('R', 3, 9) DCL::uysttl('L', '[Y]', 1.0) DCL::uxmttl('T', 'ULXLOG/ULYLOG', 0.0) DCL::grclsprogram uxyz2
対数座標軸を描くには, まず grstrn ルーチンによって対数変換をあら
わす変換メソッド(元関数)番号を設定します. 変換メソッド(元関数)番号についてはすでに第
4.1.3節で説明しましたが, 1: 直角一様座標(線形座標), 2:
片対数(y軸)座標, 3: 片対数(x軸)座標, 4: 両対数座標です.
対数座標軸を描くメソッド(元サブルーチン)は ulxlog, ulylogです. ここで も, 最初の引数で座標軸を描く場所を指定します. 2番めの引数は, 1桁の範 囲に描くラベルの数であり, x軸については1となっていて, 10nのところ にのみラベルが描かれます. また, y軸については3となっていて, 10n以 外にも 2×10n , 5×10nにラベルが描かれてます. この引数 が2ならば, 10nと 2×10n にラベルが描かれます. 最後の引数は, 1桁の範囲に描く目盛りの数です. ここでは1から9まですべての目盛を打つよ うに, 9を指定しています. 8以下の場合には, 目盛間隔の狭いところから省か れます.