12.2 カラーライン

ポリライン, ポリマーカー, テキストなどの線分による出力プリミティブは, 個別にラインインデクスを指定することができましたから, それぞれ, フルに 3桁の値で指定すると, カラーのライン, マーカー, テキストとなります. ま た, GRPH2 の各パッケージも, 用いられている線分のラインインデクスに関す る内部変数を変更できるようになっていますから, 容易にカラー化できます. 次の color2 プログラムで, カラー線画の実例を見てみましょう.

uzpget/uzpset ルーチンで座標軸関連の内部変数の管理を行ないますが, そのなかの 'INDEXT1', 'INDEXT2', 'INDEXL1', 'INDEXL2' がラインインデクスの設定に関するものです. 'INDEXT1''INDEXT2' は座標軸および目盛を描く線分の, 'INDEXL1''INDEXL2' はラベルおよびタイトルの文字を描く線分のラインインデク スを指定する内部変数です. 最後が '1' のほうが小さめの目盛やラベ ル, タイトルを描く時に用いられ, '2' のほうは大きめのものを描く時 に用いられます.

この例では, 標準のカラーマップを用いた時, 目盛は淡青で描き, 小さめの文 字は濃青で, 大きめの文字は紫で描きます. 太さは, 小さめの目盛は細線で, それ以外はやや太くなります.

折れ線をsgplu ルーチンで描くのですが, そのラインインデクスは sgspli ルーチンで 24, 赤色の太い線と指定しています.

# color2.rb


require "narray"
require "numru/dcl"
include NumRu
include Math


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

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

#-- graph ---
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gropn iws

DCL::grfrm

DCL::grswnd(x[0], x[nmax], -1.5, 2.0)
DCL::grsvpt(0.2, 0.9, 0.2, 0.9)
DCL::grstrn(1)
DCL::grstrf

DCL::sgiset('IFONT', 2)
DCL::uziset('INDEXT1', 402)
DCL::uziset('INDEXT2', 404)
DCL::uziset('INDEXL1', 303)
DCL::uziset('INDEXL2', 123)
DCL::uxaxdv('B', 2.0, 10.0)
DCL::uxaxdv('T', 2.0, 10.0)
DCL::uxsttl('B', 'YEAR', 0.0)

DCL::uyaxdv('L', 0.1, 0.5)
DCL::uyaxdv('R', 0.1, 0.5)
cttl = DCL::csgi(131) + 'T [K]'
DCL::uysttl('L', cttl, 0.0)

DCL::uxmttl('T', 'INTERANNUAL VARIATION', 0.0)

DCL::sgspli(24)
DCL::sgplu(x, y)
DCL::grcls

program color2