「好みの間隔で目盛りをうち, 好みのところにラベルを描く. しかも, ラベルには数字だけでなく文字列も使いたい.」 そのような要求にも柔軟に対応できます. 緯度のラベルは文字列で表現し, また圧力の目盛はデータが存在するレベルだけに打つというプログラムが下の例です.
目盛とラベルを描く場所を指定して座標軸を描くサブルーチンは 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) |