座標軸のスタイルを変える

1d05.f90
program sample_1d05

  use dcl
  integer, parameter :: n=200, m=10
  real, dimension(n) :: x, y
  real, dimension(m) :: a

    a = (/( (-1)**j *2./((j*2-1)*DCL_PI), j=1, m) /)

    dt = 1./(n-1)
    x  = (/( dt*(i-1), i=1, n )/)

    do  i=1, n
      y(i) = 2*sum(a*cos((/(  2*DCL_PI*dt*(i-1)*(j*2-1), j=1, m )/)) )
    end do

!-----------------------------------------------------------------------

    call DclOpenGraphics
    call DclNewFrame

!         --- x axis ---
    call DclSetParm('AXIS:uyuser'  , 0.)
    call DclSetParm('SCALE:cxside'  , 'u')

!         --- y axis ---
    call DclSetParm('AXIS:irotlyl' , 1)
    call DclSetParm('AXIS:icentyl' , 0)
    call DclSetParm('SCALE:cyside'  , 'l')

!         --- etc. ---
    call DclSetParm('AXIS:inner' , -1)
    call DclSetParm('SCALE:cblkt' , '[]')

    call DclSetTitle('Time', 'Voltage', 'Sec', 'mV')
    call DclDrawScaledGraph(x, y)

    call DclCloseGraphics

end program


とにかくデータは描けるようになったが, いつも真四角な箱型の座標軸ではつまらない. と, 人間だんだん欲が出てくることをUSPACKはちゃんと見通している. というより, USPACKは座標軸の細かな設定に関しては, かなりの部分でUXPACK/UYPACKに「よきに計らえ」と任せているので, 細かなことはこれらをコントロールするUZPACKにお願いすれば, いろいろと面倒を見てくれる. 裏を返せば, 細かいことまで思い通りにしたければUSPACKを呼ぶ前に, UZPACKにちゃんと根回しをしておかなければならない.

まず, 座標軸を描く位置は USPACK が管理しているので, USCGET/USCSETの内部変数'CXSIDE'(X軸)と 'CYSIDE'(Y軸)を指定する. 'CXSIDE', 'CYSIDE'は長さ2の文字型変数で, 'CXSIDE''T'(Top), 'B'(Bottom), 'U'(User)のうち2文字まで, 'CYSIDE''R'(Right), 'L'(Left), 'U'(User)のうち2文字まで指定でき, 初期値はそれぞれ'BT', 'LR'である. これらの文字は1文字づつ座標軸ルーチン (UXAXDV/UYAXDV)に渡される. 後はこれらのルーチンの仕事である.

uspk07.fの様に'CXSIDE''U'を指定した場合には, UXPACKに「ユーザー定義の位置」を通知しておかなければUXPACKが困ってしまう. そこでUZRSETで内部変数'UYUSER'を0.にして, X軸をY=0の位置に描くように指定する. この時, USGRPHは Y軸のスケーリングに関して, X軸を描く位置 (Y=0) を含めてスケーリングするので, 仮にデータが0を含まなくても 座標軸がとんでもないところに描かれることはない.

その他, uspk07.fの中では UZISET'IROTLYL''ICENTL'を変更して, Y軸のラベルを軸に平行にし, 'INNER'-1にして目盛を外向きにしている.

なお, 座標軸のタイトルとサブラベルに関してはUSPACKが管理しており, 'CXSIDE', 'CYSIDE'に指定された最初の文字の 位置にこれらを描くことになっている. (サブラベルの向きはUZISET'IROTLzs'に従う) また, サブラベルの文字を囲む括弧が気に入らない場合には, USCSETで内部変数'CBLKT'を指定することによって 変更することができる. この変数に空白を指定すると括弧は描かない.

これらUSpSET/USCSET及び UZpSETで設定された 座標軸のスタイルに関するパラメタは, 再設定されるまで有効である. タイトルとスケーリングに関するパラメタは GRFRMまたは GRFIGによって初期化される. 詳しい内部変数名およびリセットされるタイミングは, 「GRPH2」マニュアルの USPACK の章を参照のこと.

関連リンク