次のプログラム STEP1 では, Plot.draw メソッドを用いて4種類
の折れ線を一枚の図に重ね書きしてみましょう. まず,
Fig.inclpointメソッド
を4回呼んで x と y0, y1, y2, y3 のデータ
のなかから x と y の最大値と最小値を見つけ, 「おまかせ」で正規化変
換を確定して, 座標軸も描きます.
さて, 折れ線の描画ですが, 折れ線には, 線種と線の太さの2つの属性があり
ます. Plot モジュールのパラメタlinetype と lineindex でこれらの属性を変更
でき, Plot.draw メソッドで折れ線を描きます. 属性を陽に変更しなければ,
それぞれの初期値(デフォルト)がそのまま使われます.
このプログラム例では, まず初期値のまま (x,y0) の折れ線を描き, 次 に少し線を太くして, 破線で (x,y1) を, 点線で (x,y2) を, そ して1点鎖線で (x,y3) を描いています.
X, Y (実数型) 折れ線を結ぶ点の(x,y)座標値 を与える配列.
1:実線, 2:破線, 3:点線, 4:1点鎖線. (初期値は1)
1から大きくなるにつれて太くなる. (初期値は1)
Plot.draw で折れ線を描く際, その属性は予め指定しておくと描画 後も有効となりますが、Plot.drawの引数として属性指定を行うことも可能で す。その際、設定された属性はその描画のみ有効なものとなります。
step1.rb: frame1
# # step1.rb require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath nmax = 201 imax = 5 len_2 = 5 x = 0 y0 = 1 y1 = 2 y2 = 3 y3 = 4 z1 = NArray.sfloat(nmax, len_2) # 2nd Dimension # 0: x, 1: y0, 2: y1, 3:y2 4: y3 in step1.f a = [] #-- data ---- for m in 1..imax tm = (2*m - 1)*PI a[m-1] = (-1.0)**m * 2/tm end for n in 1..nmax z1[n-1,x] = 1.0*(n-1)/(nmax-1) tn = 2*PI*z1[n-1,x] z1[n-1,y0] = if (tn < PI/2 || tn >= PI*3/2) then 0.0 else 1.0 end z1[n-1,y1] = 0.5 + a[0]*cos(tn) z1[n-1,y2] = 0.5 z1[n-1,y3] = 0.5 for k in 1..imax tk = 2*k - 1 tc = a[k-1]*cos(tk*tn) z1[n-1,y2] = z1[n-1,y2] + if (k <= 3) then tc else 0 end z1[n-1,y3] = z1[n-1,y3] + tc end end #-- graph ---- Dev.open Frame.new x = z1[true,x] y0 = z1[true,y0] y1 = z1[true,y1] y2 = z1[true,y2] y3 = z1[true,y3] Fig.inclpoint(x, y0) Fig.inclpoint(x, y1) Fig.inclpoint(x, y2) Fig.inclpoint(x, y3) Axis.title('FREQUENCY', '/DAY', 'RESPONSE', '') Axis.draw Plot.draw(x, y0) Plot.lineindex = 3 Plot.draw(x, y1, "linetype"=>2) Plot.draw(x, y2, "linetype"=>3) Plot.draw(x, y3, "linetype"=>4) Dev.closePROGRAM STEP1