右も左も日付軸

これまで, 同じ座標軸作画ルーチンを呼んでも, 下側と左側にはラベルを描き, 上側と右側は目盛だけでラベルは描きませんでした. 左右両方に異なったラベ ルの座標軸を描きたい時にはどうすれば良いのでしょう.

座標軸のラベルを描くか描かないかは, 内部変数によって制御されています. この例のように, 右側の座標軸に関してはDclSetParmルーチンで 'DRAW_RIGHT_LABEL'という内部変数を.TRUE.にすることによって, 右側の座標軸についてもラベルが描けます. 左側は'DRAW_LEFT_LABEL', x軸の上と下はそれぞれ, 'DRAW_TOP_LABEL', 'DRAW_BOTTOM_LABEL'によって制御されています.

右側の座標軸はDclDrawAxisによって描きました. DclSetWindowreal(days), 0.0とウインドウを指定したので, ラベルの値が上から下に増えています. また, DclSetParmルーチンで内部変数'RIGHT_TITLE_ANGLE' を -1 にしたので, DclDrawTitleで描いた 'DAY NUMBER' という座標軸のタイトルも 180度回転しています. この回転角の値は, 90度を単位とする整数値で指定します.

左側の座標軸はDclDrawAxisCalendarルーチンで描いたのですが, この例からわかるように, 日数のラベルが描けないような場合には, 適当に判断して月と年の目盛だけが描かれます. なお, 日, 月, 年の座標軸を別々に描くこともできます.

なお, この例ではDclSetAxisFactorを呼んで, 文字や目盛のサイズを全体的に小さく(デフォルトの0.8倍)して座標軸を描いています.

cal2.f90
program calendar2

  use dcl
  integer,parameter :: days=720
  type(dcl_date) :: date

    date%year = 1981
    date%month = 12
    date%day = 1

    call DclOpenGraphics()
    call DclSetAxisFactor( 0.8 )
    call DclNewFrame

    call DclSetWindow( -180.0, 180.0, real(days), 0.0 )
    call DclSetViewPort( 0.2, 0.8, 0.2, 0.8 )
    call DclSetTransFunction

    call DclDrawAxis( 'bt', 10.0, 60.0 )
    call DclDrawTitle( 'b', 'Longitude', 0.0 )

    call DclDrawAxisCalendar( 'l', date, nd=days )
    call DclSetParm( 'DRAW_RIGHT_LABEL', .true. )
    call DclDrawAxis( 'r', 20.0, 100.0 )
    call DclSetParm( 'RIGHT_TITLE_ANGLE', -1 )
    call DclDrawTitle( 'r', 'Day Number', 0.0 )

    call DclDrawTitle( 't', 'Calendar', sw=2 )

    call DclCloseGraphics

end program



関連リンク

DclDrawAxisCalendar
(UCXACL,UCYCL, UCXADY,UCYADY, UCXANM,UCYANM, UCXAYR,UCYAYR)
日付座標軸を描く.