注文の多い目盛りうち

「好みの間隔で目盛りをうち, 好みのところにラベルを描く. しかも, ラベルには数字だけでなく文字列も使いたい.」 そのような要求にも柔軟に対応できます. 緯度のラベルは文字列で表現し, また圧力の目盛はデータが存在するレベルだけに打つというプログラムが下の例です.

目盛とラベルを描く場所を指定して座標軸を描くサブルーチンは DclDrawAxisSpecifyです. 最初の引数は場所を指定する引数です. 2番目の引数は, ラベルと大きめの目盛りをうつ場所のユーザー座標系での値を与える実数型配列です. 3番目の引数は小さめの目盛りを打つ場所を指定する配列です. この引数を省略すると小さめの目盛りは描かれません. labelオプションで, ラベルを指定する文字型配列を与えます. これは2番目の引数と同じ大きさの配列にします.

specify.f90
program specify

  use dcl

  integer,parameter :: nx1=21, nx2= 5, ny2=18
  real,dimension(nx1) :: rx1 = (/ &
    -50,-45,-40,-35,-30,-25,-20,-15,-10, -5,  0, &
      5, 10, 15, 20, 25, 30, 35, 40, 45, 50 /)
  real,dimension(nx2) :: rx2 = (/ &
     -40 ,  -20 ,    0 ,   20 ,    40 /)
  real,dimension(ny2) :: ry2 = (/ &
    1000. , 850.  , 700.  , 500.  , 400.  , 300.  , &
     250. , 200.  , 150.  , 100.  , 70.   , 50.   , &
      30. , 10.   , 5.    , 2.    , 1.    , 0.4   /)
  character(len=4),dimension(nx2) :: cx2 = (/ &
    '40S ','20S ','EQ  ','20N ','40N ' /)
  character(len=4),dimension(ny2) :: cy2 = (/ &
    '1000','    ','    ','500 ','    ','    ', &
    '    ','200 ','    ','100 ','    ','50  ', &
    '30  ','10  ','5   ','2   ','1   ','.4  ' /)

    call DclOpenGraphics()

    call DclNewFrame

    call DclSetWindow( -50.0, +50.0, 1.0e3, 0.4 )
    call DclSetViewPort( 0.2, 0.8, 0.2, 0.8 )
    call DclSetTransNumber( DCL_UNI_LOG )
    call DclSetTransFunction

    call DclDrawAxisSpecify( 'b', rx2, rx1, label=cx2 )
    call DclDrawAxisSpecify( 't', rx2, rx1 )
    call DclDrawTitle( 'b', 'Latitude', 0.0 )

    call DclDrawAxisSpecify( 'l', ry2, label=cy2 )
    call DclDrawAxisSpecify( 'r', ry2 )
    call DclDrawTitle( 'l', 'Pressure (hPa)', 0.0 )

    call DclDrawTitle( 't', 'DclDrawAxisSpecify', 0.0, 2 )

    call DclCloseGraphics

end program



関連リンク

DclDrawAxis
(UXAXDV,UYAXDV)
目盛間隔、ラベル間隔を指定して座標軸を描く.
DclDrawAxisSpecify
(UXAXNM,UYAXNM, UXAXLB,UYAXLB)