3.2 基本概念(2): 折れ線(軌跡図)

次のプログラム STEP1 では, Plot.draw メソッドを用いて4種類 の折れ線を一枚の図に重ね書きしてみましょう. まず, Fig.inclpointメソッド を4回呼んで xy0, y1, y2, y3 のデータ のなかから xy の最大値と最小値を見つけ, 「おまかせ」で正規化変 換を確定して, 座標軸も描きます.

さて, 折れ線の描画ですが, 折れ線には, 線種と線の太さの2つの属性があり ます. Plot モジュールのパラメタlinetypelineindex でこれらの属性を変更 でき, Plot.draw メソッドで折れ線を描きます. 属性を陽に変更しなければ, それぞれの初期値(デフォルト)がそのまま使われます.

このプログラム例では, まず初期値のまま (x,y0) の折れ線を描き, 次 に少し線を太くして, 破線で (x,y1) を, 点線で (x,y2) を, そ して1点鎖線で (x,y3) を描いています.

Plot.draw で折れ線を描く際, その属性は予め指定しておくと描画 後も有効となりますが、Plot.drawの引数として属性指定を行うことも可能で す。その際、設定された属性はその描画のみ有効なものとなります。

 

\resizebox{10cm}{!}{\includegraphics{step/step1.eps}}


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.close

PROGRAM STEP1