USPACK : 1次元量のグラフ表示ルーチン

概要

USPACK はデータを簡単にグラフ化することを主目的とした いわゆるオート・スケーリング・ルーチンのパッケージである. このパッケージの主な機能は,

  1. データの最大最小値を調べて,適切な正規化変換パラメタを求める.
  2. 現在設定されている正規化変換に対して, 適切な目盛及びラベル間隔を計算して座標軸を描く.
ことである. 2番目の座標軸を描くルーチンは, 独立に呼ぶことができるので, 簡単に座標軸を描くユーティリティーをしても使える. コンターを描くUDPACKなどと組み合せて使うと便利である.

なお,実際の折れ線グラフはUUPACK, 座標軸やタイトルはUXPACK/UYPACKなどに依存している.

基本構造

USPACK は与えられたデータに対して, 適当な正規化変換のパラメタを求める「スケーリング・ルーチン」と, 設定された正規化変換に対して, 適当な目盛り間隔などを求めて座標軸を描く「座標軸ルーチン」がある. スケーリング・ルーチンと座標軸ルーチンは基本的に独立に動作し, どちらか一方だけを使うことができる.

さらに,これらを組み合わせて簡便にグラフを描くための 「簡単ルーチン (USGRPH)」からなる.

簡単描画ルーチン (USGRPH)

とにかく簡単にデータをグラフ化するためのルーチンで, 1行で折れ線グラフまで描いてくれる. これらを使ったプログラムは次のようになる.

       CALL GROPN(IWS)    ! デバイスオープン
       CALL GRFRM         ! フレームを用意
       CALL GRSTRN(ITR)   ! 変換関数番号の指定(省略可,省略値 1)

CALL USSTTL(....) ! タイトル設定(省略可) CALL USGRPH(N,X,Y) ! グラフ描画

CALL GRCLS ! デバイスのクローズ

GRFRMUSGRPH の間で, 変換関数に関するパラメタを 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による作画範囲

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               内部変数初期化                                  
                                                                       


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:09:25 EDT 1995