格子点で与えられた2次元のスカラーデータを手早く等高線図で描きたいとい
うときには, メソッド Contour.draw を呼びます(U2D1). Contour.draw ルーチンは等高線を描くだけですから, まず正規化変換を設定します.
ウインドウは Figモジュールのパラメタ window で[TMIN,TMAX]×[ZMIN,ZMAX](
[0,5]×[20,50])と陽に設定
しますが, ビューポート([0.2,0.8,] ×[0.2,0.8,] )と変換関数番号(1:
直角一様座標)は括弧内の初期値を用います.
次に, Axis.title メソッドで座標軸タイトルの情報を与え, Axis.draw
ルーチンでおまかせの座標軸を描きます.
そして, 最後に Contour.draw メソッドを呼んで等高線を描きます. 現在設定 されているウインドウいっぱいに等間隔の格子点が設定されて,コンタリング が行なわれます. つまり, 座標軸の目盛に関係なく, U(1,1) が左下隅, U(NT,NZ) が右上隅にくるように等間隔の格子点座標が設定されます. コンターレベルは自動的に決定され, 図の下にそのコンター間隔が表示されま す. Contour.draw の引数の2番目以降で配列の寸法を指定しますが, 第1次元 寸法を2度指定するのは, 配列の一部分だけを作画できるようにするためです. この例のようにデータ全部を描く場合は, 2番目の引数と3番目の引数を同じ (NT)にします.
# # u2d1.rb require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath nt = 51 nz = 21 tmin = 0.0 tmax = 5.0 zmin = 20.0 zmax = 50.0 dt = (tmax-tmin)/(nt-1) dz = (zmax-zmin)/(nz-1) u = NArray.sfloat(nt, nz) #-- data ---- for j in 0..nz-1 zj = j*dz uz = exp(-0.2*zj)*(zj**0.5) for i in 0..nt-1 ti = i*dt-2.0*exp(-0.1*zj) u[i,j] = uz*sin(3.0*ti) end end #-- graph ---- Dev.open Frame.new Fig.window=[tmin, tmax, zmin, zmax] Axis.title('TIME', 'YEAR', 'HEIGHT', 'km') Axis.draw Contour.draw(u) Dev.closePROGRAM U2D1