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

次のプログラム 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) を描いています.

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