10.2 2次元量表示における欠損値処理

格子点の値が欠損値のときでも, 欠損値処理の指定をすることによって, Contour や Tone, Vector にある2次元量表示サブルーチンでも欠損値処理を して作図できます.

プログラム MISS2 の例では, 基本的には第1.2節の QUICK4 と同じプログラム構成で, ただし格子点値の一部分を欠損値 rmiss (この値はCommonモジュールのパラメタを 参照しました)として, 欠損値処理の指定をおこなって作画しています. 欠損 値処理の指定は, やはり パラメタ lmiss.TRUE. とすることによっておこないます. この実行結果 からもわかるように, 欠損値のまわりの格子点を境界としてコンターやトーン が描かれません.

#
# miss2.rb

require "narray"
require "numru/advanceddcl"
include NumRu::AdvancedDCL
include NMath


nx = 37
ny = 37
xmin = 0
xmax = 360
ymin = -90
ymax = 90
drad = PI/180
p = NArray.sfloat(nx, ny)

rmiss = Common.rmiss
Common.lmiss =  true

#-- data ---
for j in 0..ny-1
  for i in 0..nx-1
    alon = (xmin + (xmax-xmin)*i/(nx-1)) * drad
    alat = (ymin + (ymax-ymin)*j/(ny-1)) * drad
    slat = sin(alat)
    p[i,j] = 3*sqrt(1-slat**2)*slat*cos(alon) - 0.5*(3*slat**2-1)
    if ( i == 5 && j == 5 )
      p[i,j] = rmiss
    end
    if ( ( 7 <= i && i <= 23) && j == 29 )
      p[i,j] = rmiss
    end
    if( (21 <= i && i <= 29) && (11 <= j && j <= 19))
      p[i,j] = rmiss
    end
  end
end

#-- graph ---
Dev.open

Frame.new

Fig.window=[xmin, xmax, ymin, ymax]
Fig.viewport=[0.2, 0.8, 0.2, 0.8]
Fig.transnum = 1

Tone.draw(p)
Axis.draw
Contour.draw(p)

Dev.close

PROGRAM MISS2



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

2次元ベクトル場を作画する Vector でも, 同様の欠損値処理を行ないます. Vector.draw ルーチンでは, ベクトルの少なくとも1成分が欠損値の時にはベ クトルを描きません. Vector に関するパラメタ lmissp.TRUE. にすると, 欠損値ベクトルの格子点にマー カー × を描きます. この印のマーカータイプやマーカーサイズは, やはり, パラメタ itype1, rsizem を設定することにより変更できます.