前節で紹介した Plot.draw メソッドのかわりに Mark.draw を用いると,
データ列をマーカー列で表現でき, いわゆる分布図が描けます. 次のプログラ
ム STEP2 では, 乱数列をもとに (x,y) のデータをつくり, 分布
図を描きます. Fig.inclpoint でデータの範囲を求め, 正規化変換を確定し, Axis.draw で座標
軸を描き, Mark.draw を使ってマーカー列を描いています.
ところで, マーカーには, マーカーの種類, 描く線の太さ, マーカーの大きさ
の3つの属性があります. marktype, markindex,
marksize の各パラメタでこれらの属性を変更できます. これらを呼んで思い通りのマーカー
が選べたら, Mark.draw ルーチンでマーカー列を描くことになります.
このプログラム例では, 太い線で初期値の1.5倍の大きさのマーカーを選び, マーカーの種類は, 最初の25個を初期値の '.' で, 次からの25個ずつ をそれぞれ,' +', '*', '。' で描いています.
x, y (実数型) マーカーを打つ点の(x,y)座標値 を与える配列.
1: '.', 2:'+', 3:'*', 4:'。', など, フォントテーブル(付録)のDCL文字番号に 対応する文字・記号を描く. (初期値は1)
1から順に太くなる. (初期値は1)
V-座標系での値で与える. (初期値は0.01)
ここで, マーカーの大きさで出てきた「V-座標系」について説明しておきましょ う. 実際に作画できる領域は出力装置によって異なりますが, DCLではそれらに 最大内接する正方形を考えて, 「描画領域」とします. この1辺の長さが1にな るように規格化した [0,1]×[0,1] の座標系をV-座標系と呼びます.
# # step2.rb # $Id: step2.rb,v 1.1 2000/11/18 18:57:43 keiko Exp $ # require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath nmax = 100 x = 0 y = 1 x = NArray.sfloat(nmax) y = NArray.sfloat( nmax) #-- data ---- iseed = 0 x[0] = 2*(rand(iseed)-0.5) y[nmax-1] = x[0] for i in 1..nmax-1 x[i] = 2*(rand(iseed)-0.5) y[i-1] = x[i] end #-- graph ---- Dev.open Frame.new Fig.inclpoint(x, y) Axis.title( 'X-TITLE', 'x-unit', 'Y-TITLE', 'y-unit' ) Axis.draw cnt = nmax/4 st = 0 ed = cnt-1 Mark.markindex = 5 Mark.marksize = 0.015 Mark.draw(x[st..ed], y[st..ed]) st += cnt ed += cnt Mark.draw(x[st..ed], y[st..ed], "marktype"=>2) st += cnt ed += cnt Mark.draw(x[st..ed], y[st..ed], "marktype"=>3) st += cnt ed += cnt Mark.draw(x[st..ed], y[st..ed], "marktype"=>4) Dev.closePROGRAM STEP2