これまで, 同じ座標軸作画ルーチンを呼んでも, 下側と左側にはラベルを描き, 上側と右側は目盛だけでラベルは描きませんでした. 左右両方に異なったラベ ルの座標軸を描きたい時にはどうすれば良いのでしょう.
座標軸のラベルを描くか描かないかは, 内部変数によって制御されています. この例のように, 右側の座標軸に関してはDclSetParmルーチンで 'DRAW_RIGHT_LABEL'という内部変数を.TRUE.にすることによって, 右側の座標軸についてもラベルが描けます. 左側は'DRAW_LEFT_LABEL', x軸の上と下はそれぞれ, 'DRAW_TOP_LABEL', 'DRAW_BOTTOM_LABEL'によって制御されています.
右側の座標軸はDclDrawAxisによって描きました. DclSetWindowでreal(days), 0.0とウインドウを指定したので, ラベルの値が上から下に増えています. また, DclSetParmルーチンで内部変数'RIGHT_TITLE_ANGLE' を -1 にしたので, DclDrawTitleで描いた 'DAY NUMBER' という座標軸のタイトルも 180度回転しています. この回転角の値は, 90度を単位とする整数値で指定します.
左側の座標軸はDclDrawAxisCalendarルーチンで描いたのですが, この例からわかるように, 日数のラベルが描けないような場合には, 適当に判断して月と年の目盛だけが描かれます. なお, 日, 月, 年の座標軸を別々に描くこともできます.
なお, この例ではDclSetAxisFactorを呼んで, 文字や目盛のサイズを全体的に小さく(デフォルトの0.8倍)して座標軸を描いています.
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) |
日付座標軸を描く. |