マーカー

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] の座標系を正規座標系と呼びます.

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