USPACK はデータを簡単にグラフ化することを主目的とした いわゆるオート・スケーリング・ルーチンのパッケージである. このパッケージの主な機能は,
なお,実際の折れ線グラフはUUPACK, 座標軸やタイトルはUXPACK/UYPACKなどに依存している.
USPACK は与えられたデータに対して, 適当な正規化変換のパラメタを求める「スケーリング・ルーチン」と, 設定された正規化変換に対して, 適当な目盛り間隔などを求めて座標軸を描く「座標軸ルーチン」がある. スケーリング・ルーチンと座標軸ルーチンは基本的に独立に動作し, どちらか一方だけを使うことができる.
さらに,これらを組み合わせて簡便にグラフを描くための 「簡単ルーチン (USGRPH)」からなる.
CALL GROPN(IWS) ! デバイスオープン CALL GRFRM ! フレームを用意 CALL GRSTRN(ITR) ! 変換関数番号の指定(省略可,省略値 1)CALL USSTTL(....) ! タイトル設定(省略可) CALL USGRPH(N,X,Y) ! グラフ描画
CALL GRCLS ! デバイスのクローズ
GRFRM と USGRPH の間で, 変換関数に関するパラメタを GRPACK や SGPACK で設定したり, その他のパラメタを USpSETにより設定することができる. また,USSTTL により座標軸のタイトルなどを指定することもできる.
これらのルーチンは,とにかく簡便にデータをグラフ化するには便利である. しかし,複数の折れ線を一つの図に入れたり, 他のパッケージと組み合わせて使うなどの応用をするには スケーリング・ルーチンと座標軸ルーチンを直接使う方がよい. 上記のプログラムをこれらの基本的なルーチンを使って書き直すと 次のようになる.
CALL GROPN(IWS) ! デバイスをオープン CALL GRFRM ! フレームを用意 CALL GRSTRN(ITR) ! 変換関数番号の指定(省略可)CALL USSPNT(N,X,Y) ! データ範囲の指定 CALL USPFIT ! 変換関数パラメタ設定 CALL GRSTRF ! 変換関数確定
CALL USSTTL(....) ! タイトル設定(省略可) CALL USDAXS ! 座標軸描画
CALL UULIN (N,X,Y) ! 折れ線描画
CALL GRCLS ! デバイスのクローズ
スケーリング・ルーチンは与えられたデータから適当な正規化変換の パラメタを求めるもので, GRSWND, GRSVPT の代わりをするルーチンである. 変換関数の確定は行わないので,GRSTRF により関数の確定をする 必要がある.
正規化変換のパラメタを決めるためには, これから描こうとする折れ線などのデータ範囲を知らなければならない. USSPNT はそのデータを指定するもので, USPFIT を呼ぶ前に何回でも呼ぶことができる. 例えば複数の折れ線を描くためには, それらのデータをすべて与えなければならない. USPFIT はこれらのデータの最大最小値を切りの良い数値に丸めて ウインドウを決定する. なお,GRSWND/SGSWND または SGpGET/SGpSETなどにより, ウインドウをユーザーが陽に指定した場合は, これらの値が優先される.
ビューポートは,USPACK が描く座標軸関係の文字がすべて描けるように, 最大作画領域から文字の大きさ (UZpGET/UZpSETの管理する内部変数'RSIZEL1') に比例した幅の マージンをとった大きさに設定される. したがって,UZFACT 等によりラベルの文字の大きさを変えたり, SGpGET/SGpSETの管理する内部変数 'LFULL' を.TRUE. にしたりすると, グラフの大きさも変る. また,ビューポートもGRSVPT/SGSVPT または SGpSET, SGpSTXにより 陽に指定されている場合は, これらの値が優先される.
USDAXSは現在設定されている変換関数に対して, 目盛間隔やラベルの間隔を適切に設定して座標軸を描くものである. 座標軸を描く位置は USCSETの内部変数CXSIDE/CYSIDEで指定され, タイトルなどは USSTTLまたはUSCSETで指定することができる. なお,USDAXS は基本的に X-軸とY-軸を独立に処理しており, しかも,ラベル間隔の決めるときにラベルと軸の角度(平行か垂直)により 異なった処理を行う. 通常は X-軸,y-軸ともにラベルを水平 (x-軸と並行)にするようになって いるので, X-軸とY-軸のデータ範囲が同じであっても, ラベル間隔が異なることがある. それが気持ち悪いときには,USLSETで'LMATCH' を .TRUE. にすると, 実際のラベルの向きに関わらず, ラベルが軸と平行に書かれるものと仮定して ラベル間隔を求めるようになるので, X-軸とY-軸のラベル間隔を揃えることができる.
USDAXS はX-軸とY-軸の両方を描くが, 片方ずつ描画する USXAXS, USYAXS もある.
USPACK 固有のパラメタは USpGET/USpSETによって管理されているが,タイトルをまとめて指定するルーチン USSTTLも用意されている. このうち USINIT は,GRFRM GRFIG から呼ばれるので, 通常ユーザーが呼ぶ必要はない.
なお,USPACKはUUPACKやUXPACK/UYPACKの ルーチンを使って座標軸や折れ線を描くので, これらのパッケージの内部変数に影響される. 各制御項目とそれを制御するルーチン名及び内部変数名は以下のとおり.
制御項目 設定ルーチン 内部変数名 座標軸の最大最小値 * UXMIN/UXMAX/UYMIN/UYMAX SGpSET/SGSWND ビューポート * VXMIN/VXMAX/VYMIN/VYMAX SGpSET/SGSVPT 座標軸の向き USLSET LXINV/LYINV オフセット値 USRSET XOFF/YOFF ファクター値 USRSET XFAC/YFAC 目盛間隔 USRSET DXT/DYT 座標軸の位置 USCSET CXSIDE/CYSIDE 目盛の向き *UZISET INNER ラベル間隔 USRSET DXL/DYL ラベルの向き *UZISET IROTLzs ラベルのセンタリング *UZISET ICENTzs オプション タイトル文字 USCSET/USSTTL CXTTL/CYTTL サブラベルの単位 USCSET CXUNIT/CYUNIT サブラベルの括弧 USCSET CBLKT サブラベルの位置 USCSET CXSPOS/CYSPOS タイトル,サブラベル, *UZLSET LABELzs ラベルのフラグ 文字の大きさ *UZFACT 引数 折れ線の属性 *UUSLNI/UUSLNT 引数
USPACKによる最大作画範囲を下の図に示す. これらの範囲は内部変数によって変化するが, 初期状態では目盛を内側に描く(x_1=y_1=0)ので, 左マージンがx_2+x_3 = 0.1463, 右マージンがRSIXEL1 2 = 0.042, 上マージンがs_y=0.0537, 下マージンがy_2+y_3+y_4=0.119 あれば タイトルまで含めて全て作画範囲に入る.
なお初期状態で上下左右とも0.2のマージンを取る.
uscnf.f:page1
x_1 = RSIZET2 = 0.014 x_2 = (MXDGTY + PAD1 ) RSIZEL1 = 0.0987 x_3 = ( 1 + PAD1 ) RSIZEC1 = 0.0476
y_1 = RSIZET2 = 0.014 y_2 = ( 1 + PAD1 ) RSIZEL1 = 0.0357 y_3 = ( 1 + PAD1 ) RSIZEL1 = 0.0357 y_4 = ( 1 + PAD1 ) RSIZEC1 = 0.0476
s_x = RSIZET2 + (MXDGTSY + PAD1 ) RSIZEL1 = 0.1547 s_y = SOFFYLT + (1+PAD1) = 0.0537
USGRPH(N,X,Y) X座標値,Y座標値を与えて, 折れ線グラフを描く.
USSPNT(N,X,Y) ウインドウの範囲に含めたいデータを指定する. USPFIT 変換パラメータの決定.
USDAXS 座標軸描画. USXAXS(CXSIDE) X座標軸を描画する. USYAXS(CYSIDE) Y座標軸を描画する. USSTTL(CXTTL, CXUNIT, CYTTL, CYUNIT) タイトル設定
USpGET (CP, IPARA) 内部変数参照. USpSET (CP, IPARA) 内部変数設定. USpSTX (CP, IPARA) 内部変数設定 (実行時オプションによる変更可). USINIT 内部変数初期化
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:09:25 EDT 1995