3.1.1 基本概念

ユーザーが実際のデータをもとに作図する過程を KIHON6 のプログラム 例をもとに考えてみましょう. ある地点の年平均気温のデータが1950年から 2000年まであり, およそセ氏16度から19度の範囲内で変動していた(第 1章のロジスティク模型の結果をちょっと細工しただけですが)と しましょう. このデータを元に平均気温の年々変動の折れ線グラフを描こう と思います. x軸を時間軸にとり1950年から2000年まで, y軸には15度から 20度を範囲として, このデータを折れ線で描くことにします.

   #
# kihon6.rb

require "narray"
require "numru/advanceddcl"

include NumRu::AdvancedDCL
include NMath

nmax = 50
x = NArray.sfloat(nmax+1)
y = NArray.sfloat(nmax+1)

#-- data ----
r = 3.7
x.indgen(1950.0, 1.0)
y[0] = 0.5
for n in 0..nmax-1
  y[n+1] = r*y[n]*(1-y[n])
end

y = -4 * y + 20.0

#-- graph ----
Dev.open
Frame.new

Fig.window=[1950.0, 2000.0, 15.0, 20.0]
Fig.viewport=[0.2, 0.8, 0.2, 0.8]
Fig.transnum=1

Axis.draw
Plot.draw(x, y)

Dev.close
  PROGRAM KIHON6

 

\resizebox{10cm}{!}{\includegraphics{kihon2/kihon6.eps}}
kihon6.rb: frame1

ユーザーの使っている座標系(ここでは時間[年]と温度[度])を, ユーザー座標 系(U-座標系)と呼びます. U-座標系でグラフに描きたい範囲を「ウインドウ」 と呼び, それぞれの軸の最小値と最大値で設定します. この例では, ( UXMIN, UXMAX, UYMIN, UYMAX ) = ( 1950, 2000, 15, 20 ) で, Fig.window= メソッドで設定しています.

次に, このウインドウをV-座標系のどの範囲に対応させるかを考えて, これを 「ビューポート」と呼びます. ビューポートとは, V-座標系で通常座標軸が描 かれる矩形の領域のことです. ここでは, Fig.viewport= メソッドを用いて ( VXMIN, VXMAX, VYMIN, VYMAX ) = ( 0.2, 0.8, 0.2, 0.8 ) と 設定しました.

これで, ウインドウとビューポートの四隅は対応させることができましたが, ウインドウ内の各点をビューポート内の点に対応させる必要があります. これ を「正規化変換」と呼びます. 線形に対応させるか, 対数をとって対応させる かなどの任意性がありますから, 具体的に変換関数を決めなければなりません. SGPACK(GRPACK) ではいくつかの変換関数が用意されており, それぞれに変換 関数番号が付けられています. ここでは, Fig.transnum= メソッドで関数番号1 を指定しています. これは両軸ともに線形に対応させるもので, 直角一様座標 となります.



さて, U-座標系での描画ですが, V-座標系での各種描画ルーチンに対応するも のが, すべて用意されています. この例では, U-座標系でのポリラインプリミ ティブ Plot.draw で折れ線を描いています. 引数の与え方は全く同じで, データX, Y がU-座標系の単位で用意されています. V-座標系で の描画メソッド名が vdraw に対して, U-座 標系での描画メソッドは draw となるだけで, 全く同 じ機能になっています.