マーカー

DclDrawLine ルーチンのかわりに DclDrawMarker を用いると, データ列をマーカー列で表現でき, いわゆる分布図が描けます. 下のプログラム marker.f90 では, 乱数列をもとに (X,Y) のデータをつくり, 分布図を描きます. 9行めと11行めの関数 RNGU3(ISEED) は, DCL(77版)の中の 「その他の基本関数パッケージ」にある, 一様乱数を生成する関数のひとつです. このように, DCLにはグラフィクス以外にもさまざまなパッケージが用意され ていることを心に留めておいて下さい. DclSetScalingPoint でデータの範囲を求め, DclFitScalingParmDclSetTransFunction で正規化変換を確定し, DclDrawAxis で座標軸を描き, DclDrawMarker を使ってマーカー列を描いています.

ところで, マーカーには, マーカーの種類, 描く線の太さ, マーカーの大きさ の3つの属性があります. DclSetMarkerType, DclSetMarkerIndex, DclSetMarkerSize の各サブルーチンでこれらの属性を変更できます. これらを呼んで思い通りのマーカーが選べたら, DclDrawMarker ルーチンでマーカー列を描くことになります. また, DclDrawMarker内でこれらをすべて指定して描くこともできます.

マーカーの大きさは「正規座標系」で与えられます. 実際に作画できる領域は出力装置によって異なりますが, DCLではそれらに 最大内接する正方形を考えて, 「描画領域」とします. この1辺の長さが1になるように規格化した [0,1] x [0,1] の座標系を正規座標系と呼びます.

marker.f90
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)
マーカーの大きさを設定する.