DclDrawLine ルーチンのかわりに DclDrawMarker を用いると, データ列をマーカー列で表現でき, いわゆる分布図が描けます. 下のプログラム marker.f90 では, 乱数列をもとに (X,Y) のデータをつくり, 分布図を描きます. 9行めと11行めの関数 RNGU3(ISEED) は, DCL(77版)の中の 「その他の基本関数パッケージ」にある, 一様乱数を生成する関数のひとつです. このように, DCLにはグラフィクス以外にもさまざまなパッケージが用意され ていることを心に留めておいて下さい. DclSetScalingPoint でデータの範囲を求め, DclFitScalingParm と DclSetTransFunction で正規化変換を確定し, DclDrawAxis で座標軸を描き, DclDrawMarker を使ってマーカー列を描いています.
ところで, マーカーには, マーカーの種類, 描く線の太さ, マーカーの大きさ の3つの属性があります. DclSetMarkerType, DclSetMarkerIndex, DclSetMarkerSize の各サブルーチンでこれらの属性を変更できます. これらを呼んで思い通りのマーカーが選べたら, DclDrawMarker ルーチンでマーカー列を描くことになります. また, DclDrawMarker内でこれらをすべて指定して描くこともできます.
マーカーの大きさは「正規座標系」で与えられます. 実際に作画できる領域は出力装置によって異なりますが, DCLではそれらに 最大内接する正方形を考えて, 「描画領域」とします. この1辺の長さが1になるように規格化した [0,1] x [0,1] の座標系を正規座標系と呼びます.
program marker use dcl integer,parameter :: nmax=100 real :: x(nmax), y(nmax) !-- データ ---- iseed = 1 x(1) = 2.*(rngu3(iseed)-0.5) do n=2,nmax x(n) = 2.*(rngu3(iseed)-0.5) y(n-1) = x(n) end do y(nmax) = x(1) !-- グラフ ---- call DclOpenGraphics() call DclNewFrame call DclScalingPoint( x, y ) call DclFitScalingParm call DclSetTransFunction call DclSetTitle( 'x-title', 'y-title', 'x-unit', 'y-unit' ) call DclDrawScaledAxis call DclSetMarkerIndex( 5 ) call DclSetMarkerSize( 0.015 ) call DclDrawMarker( x(1:25), y(1:25) ) call DclDrawMarker( x(26:50), y(26:50) ,type=2 ) call DclDrawMarker( x(51:75), y(51:75) ,type=3 ) call DclDrawMarker( x(75:100), y(76:100),type=4 ) call DclCloseGraphics end program |
|
DclDrawMarker (SGPMU,SGPMZU) |
ユーザー座標系でマーカー列を描く. |
DclSetMarkerType (SGSPMT) |
マーカータイプを設定する. |
DclSetMarkerIndex (SGSPMI ) |
マーカーのラインインデクスを設定する. |
DclSetMarkerSize (SGSPMS) |
マーカーの大きさを設定する. |