マーカー列(分布図)

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


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

ところで, マーカーには, マーカーの種類, 描く線の太さ, マーカーの大きさ の3つの属性があります. UUSMKT, UUSMKI, UUSMKS の各サ ブルーチンでこれらの属性を変更できます. これらを呼んで思い通りのマーカー が選べたら, UUMRK ルーチンでマーカー列を描くことになります. また, 同様に「上意下達型」のルーチン UUMRKZ もあります.

このプログラム例では, 太い線で初期値の1.5倍の大きさのマーカーを選び, マーカーの種類は, 最初の25個を初期値の '$\cdot$' で, 次からの25個ずつ をそれぞれ,' +', '$\ast$', '$\circ$' で描いています.

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

関連リンク