「好みの間隔で目盛りをうち, 好みのところにラベルを描く. しかも, ラベルには数字だけでなく文字列も使いたい.」 そのような要求にも柔軟に対応できます. 緯度のラベルは文字列で表現し, また圧力の目盛はデータが存在するレベルだけに打つというプログラムが下の例です.
目盛とラベルを描く場所を指定して座標軸を描くサブルーチンは DclDrawAxisSpecifyです. 最初の引数は場所を指定する引数です. 2番目の引数は, ラベルと大きめの目盛りをうつ場所のユーザー座標系での値を与える実数型配列です. 3番目の引数は小さめの目盛りを打つ場所を指定する配列です. この引数を省略すると小さめの目盛りは描かれません. labelオプションで, ラベルを指定する文字型配列を与えます. これは2番目の引数と同じ大きさの配列にします.
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) |