10.1 ポリライン・ポリマーカーにおける欠損値処理

データの中に欠損がある場合には, パラメタ lmiss.TRUE. にして, 欠損値処理を有効にします.



このように指定すると, データの値が999.であるものは欠損値と見なして, こ れから見るような欠損値処理を行ないます. 欠損値999.が実際のデータ範囲に 入っていて, 別の値にしたい場合には, パラメタ rmiss を変更します.

まず, MISS1プログラムを例に, ポリラインとポリマーカーのプリミティ ブで欠損値処理がどのように行なわれるか見てみましょう. 第2 章で用いた正弦関数のデータに欠損値 999.を埋め込みます. データの1/4のと ころでは3点連続して欠損値とし, 3/4のところでは, 有効な点が欠損値データ に挟まれて1点だけ孤立しているように与えます.

#
# miss1.rb

require "narray"
require "numru/advanceddcl"

include NumRu::AdvancedDCL
include NMath


nmax = 40
xmin = 0.0
xmax = 4*PI
ymin = -1.0
ymax = 1.0

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

#-- data ----
dt = xmax/nmax
x = x.indgen * dt
y = sin(x)

n1 = nmax/4
rmiss = Common.rmiss
y[n1-1] = rmiss
y[n1]   = rmiss
y[n1+1] = rmiss

n2 = n1*3
y[n2-1] = rmiss
y[n2+1] = rmiss

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

#-- default ----
Fig.window=[xmin, xmax, ymin, ymax]
Fig.viewport=[ 0.1,  0.9,  0.7,  0.9 ]
Fig.transnum = 1

Plot.draw(x, y)

Fig.viewport=[ 0.1,  0.9,  0.5,  0.7 ]

Mark.marktype = 3
Mark.draw(x, y)

#-- cover loss data ----
Common.lmiss = true

Fig.viewport=[ 0.1,  0.9,  0.3,  0.5]

Plot.draw(x, y)

Fig.viewport=[ 0.1,  0.9,  0.1,  0.3 ]

Mark.draw(x, y)

Dev.close

 
PROGRAM MISS1

\resizebox{10cm}{!}{\includegraphics{miss/miss1.eps}}
miss1.rb: frame1

欠損値処理をしない(デフォルト)で Plot.drawMark.draw のメソッド を呼んだ結果が上の2つです. 他のデータと比べて999.は非常に大きな値です から, ポリラインではほぼ真上に線を引いて最大作画範囲を飛び出しています. また, ポリマーカーでもこれらの点は作画範囲を飛び出してしまって描かれま せん.

Commonモジュールのパラメタlmiss.TRUE. にして, 欠損値処理を行なって描いた結果が下の2つです. Commonモジュールのパラメ タは共通パラメタなので他の全てのモジュールに対して有効となります。ただ し、Common以外のモジュールで同名のパラメタが既に設定されている場合はそ ちらが有効となります。ポリラインでは欠損値の前 後を線で結びません. 有効な点が1点だけ孤立している場合には, その点を結 ぶことができないので, そこには何も描かれません. また, ポリマーカーでは 欠損値の点にはマーカーを打ちません. この例では, ポリマーカーの結果はど ちらも同じですが, 欠損値を小さくして2.とすると違いは明らかです.