2013年 1月 1日 掲載
さて,今年も GMT の連載をはじめることとしよう. 正月から GMT を使う人もいないと思うが(いたらご愁傷様),GMT の記事は毎月一日に掲載することにしているので,年末年始に在宅の今年は元日の掲載となる. 新年一発目の記事は,makecpt のオプションである.
まずはサンプルのデータ作り…,の前に GMT のパラメータをリセットしておく.
$ gmtdefaults -D > .gmtdefauls4
では,あらためて. AWK を使って,1.2cos(x)cos(y) の値 cc.txt を計算し,xyz2grd で grdファイル cc.grd にする.
$ awk 'BEGIN{for(x=-4;x<=4;x+=0.125)for(y=-4;y<=4;y+=0.125)print x,y,cos(x)*cos(y)*1.2}' > cc.txt $ xyz2grd cc.txt -Gcc.grd -R-5/5/-5/5 -I0.125
ここで,cc.txt と cc.grd の x, y の範囲が違うのは,わざとである.
これを grdimage で図化する.カラーパレットは赤青の polar を使おう.
$ makecpt -Cpolar -Z > p.cpt $ grdimage cc.grd -Jx1 -Cp.cpt -Ba2 > cc.eps
へんてこな図になった.ま,わざとなんだけど. 変なところは 3つある.
これらの色が変な部分は,いろいろと範囲外のところなのである. まずは,元データ cc.txt の範囲を確認しておこう.
$ minmax cc.txt cc.txt: N = 4225 <-4/4> <-4/4> <-1.19983/1.2>
<-4/4>, <-4/4>, <-1.19983/1.2> が x, y, z の範囲になる.
grdファイル cc.grd の情報は,grdinfo で得ることができる.
$ grdinfo cc.grd cc.grd: Title: cc.grd cc.grd: Command: xyz2grd -R-5/5/-5/5 -I0.125 cc.txt -Gcc.grd cc.grd: Remark: cc.grd: Gridline node registration used cc.grd: Grid file format: nf (# 18) GMT netCDF format (float) (COARDS-compliant) [DEFAULT] cc.grd: x_min: -5 x_max: 5 x_inc: 0.125 name: x nx: 81 cc.grd: y_min: -5 y_max: 5 y_inc: 0.125 name: y ny: 81 cc.grd: z_min: -1.19983005524 z_max: 1.20000004768 name: z cc.grd: scale_factor: 1 add_offset: 0
x, y, z の範囲は,
cc.grd: x_min: -5 x_max: 5 x_inc: 0.125 name: x nx: 81 cc.grd: y_min: -5 y_max: 5 y_inc: 0.125 name: y ny: 81 cc.grd: z_min: -1.19983005524 z_max: 1.20000004768 name: z
の部分である.
最後に,カラーパレット p.cpt を見てみる.
$ cat p.cpt # cpt file created by: makecpt -Cpolar -Z #COLOR_MODEL = RGB # -1 0 0 255 0 255 255 255 0 255 255 255 1 255 0 0 B 0 0 0 F 255 255 255 N 128 128 128
「-1 0 0 255 0 255 255 255」の行が z = -1 〜 0 までの,「0 255 255 255 1 255 0 0」の行が z = 0 〜 1 までの RGB での色指定(値 R G B 値 R G B)である.
それぞれの範囲を整理して表にすると,
ファイル | x の範囲 | y の範囲 | z の範囲 |
cc.txt | -4 ≦ x ≦ 4 | -4 ≦ y ≦ 4 | -1.2 ≦ z ≦ 1.2 |
cc.grd | -5 ≦ x ≦ 5 | -5 ≦ y ≦ 5 | -1.2 ≦ z ≦ 1.2 |
p.cpt | - | - | -1 ≦ z ≦ 1 |
となっている.
まず,cc.txt と cc.grd をくらべると,cc.grd の方が x, y の範囲が広い. 元データがない cc.grd のこの部分には値が入っていない. 当然,この部分はふつうには描画できないことになる.
次に,cc.grd と p.cpt をくらべてみよう. p.cpt の z の範囲が cc.grd よりもせまい. z < -1 と z > 1 の部分はやっぱりふつうには色がぬれない.
こういう部分の色の指定は,p.cpt の最後の 3行,
B 0 0 0 F 255 255 255 N 128 128 128
でなされている.
である. p.cpt には,それぞれ黒色(0 0 0),白色(255 255 255),灰色(128 128 128)が入っているので,上のような図になってしまうのだ.
さて,これを何とかしたい. ふつうに考えたら,z > 1 は z = 1 の色の「赤」で,z < -1 は z = -1 の色の「青」でぬってほしいだろう. makecpt に -Dオプションをつけるとそうしてくれる.
$ makecpt -Cpolar -Z -D > p.cpt $ grdimage cc.grd -Jx1 -Cp.cpt -Ba2 > cc.eps
p.cpt を確認すると,B と F の値が青(0 0 255)と赤(255 0 0)に変わっているのがわかる.
$ cat p.cpt # cpt file created by: makecpt -Cpolar -Z -D #COLOR_MODEL = RGB # -1 0 0 255 0 255 255 255 0 255 255 255 1 255 0 0 B 0 0 255 F 255 0 0 N 128 128 128
grdファイルに値がない部分の N の色は,makecpt のオプションでは指定できないようだ. gmtset で COLOR_NAN の値を変えてから,カラーパレットを作らなくてはならない. COLOR_NAN の値は,デフォルトでは,
$ gmtdefaults -D | grep "COLOR_NAN" COLOR_NAN = 128
となっている. 128 は,モノクロ 256階調での灰色の色指定の仕方である. 印刷するときインクがもったいないので white に変えよう.
$ gmtset COLOR_NAN white $ makecpt -Cpolar -Z -D > p.cpt $ grdimage cc.grd -Jx1 -Cp.cpt -Ba2 > cc.eps
B, F の値も,同じようにして自由に変えることができる. B の値に使いたい値を COLOR_BACKGROUND,F の値に使いたい値を COLOR_FOREGROUND にセットしてから,カラーパレットを作ればよい. このとき,makecpt に -Dオプションはつけないように.
$ gmtset COLOR_BACKGROUND cyan $ gmtset COLOR_FOREGROUND magenta $ makecpt -Cpolar -Z > p.cpt $ grdimage cc.grd -Jx1 -Cp.cpt -Ba2 > cc.eps
makecpt に -Nオプションをつけると,B, F, N の値がカラーパレットファイルに書かれなくなる.
$ makecpt -Cpolar -Z -N > p.cpt $ cat p.cpt # cpt file created by: makecpt -Cpolar -Z -N #COLOR_MODEL = RGB # -1 0 0 255 0 255 255 255 0 255 255 255 1 255 0 0
grdimage などの GMT のコマンドは,このようなカラーパレットファイルが指定されたとき,COLOR_BACKGROUND, COLOR_FOREGROUND, COLOR_NAN の値を直接使う. ためしてみよう.
$ grdimage cc.grd -Jx1 -Cp.cpt -Ba2 > cc.eps
$ gmtset COLOR_BACKGROUND red $ gmtset COLOR_FOREGROUND blue $ gmtset COLOR_NAN lightgray $ grdimage cc.grd -Jx1 -Cp.cpt -Ba2 > cc.eps
B, F, N の値を変えたカラーパレットファイルを作っておいてもいいし,B, F, N の値のないカラーパレットにしておいて,後で gmtset でいろいろ変えてもいい. 後者が便利な場合というのは,ちょっと思いつかないが,何か使い道があるのだろう.
最後に gmtset でいろいろいじったのをリセットして,今回はおしまいにしよう.
$ gmtdefaults -D > .gmtdefaults4
[ KDOホームにもどる] [ いちからはじめる GMT インデックスにもどる ]
(C) 2013 KDO