いちからはじめる GMT その25 - psscale -B, grdcontour -C

2009年 11月 1日 掲載


今回は,psscale のつづきをやります.


psscaleコマンドに -Bオプションをつけると, psxyコマンドのように,スケールにいろいろ修飾することができる. 今回はそれをためしてみる.

その前に,グリッドファイル hp.grd とカラーパレットファイル pl.cpt を作っておこう (前回作ったものがあれば,この作業はしなくてよい).

$ awk 'BEGIN{for(x=-4;x<=4;x+=0.1)for(y=-4;y<=4;y+=0.1)print x, y, x^2-y^2}' > hp.txt 
$ xyz2grd hp.txt -Ghp.grd -I0.1 -R-4/4/-4/4
$ makecpt -Cpolar -T-16/16/16 -Z  > pl.cpt

まず最初は,スケールにラベルをつけてみる. 今回は同じようなことを何度もするので,シェルスクリプトを書くことにする.

#!/bin/sh

grdimage hp.grd -Jx1 -Cpl.cpt -Ba1 -K > tmp.eps
psscale -D10/4/8/1 -Cpl.cpt -B:"Height(m)": -O >> tmp.eps
awk '{if($1=="%%BoundingBox:" && $5>0){print $1, $2,$3, $4, $5+80}else{print $0}}' < tmp.eps > hp.eps

psscale -B:

スケールの横にラベル「Height(m)」が書かれた.

psxy では,-B の記述を「/」で分けることで, x軸と y軸に異なるラベルを書けたが,psscale ではどうなるだろうか.

#!/bin/sh

grdimage hp.grd -Jx1 -Cpl.cpt -Ba1 -K > tmp.eps
psscale -D10/4/8/1 -Cpl.cpt -B:"Height":/:"m": -O >> tmp.eps
awk '{if($1=="%%BoundingBox:" && $5>0){print $1, $2,$3, $4, $5+80}else{print $0}}' < tmp.eps > hp.eps

psscale -B:

データ名とデータの単位を「/」で分けて記述してみたが, データ名「Height」がスケールの横に,単位「m」がスケールの上に書かれた. が,なぜかデータ名が縦書きになってしまい,ちょっとかっこ悪い. まあ,こういう図を書くときは,データ名はスケールのラベルではなく, グラフのタイトルにするのがよいだろう.

#!/bin/sh

grdimage hp.grd -Jx1 -Cpl.cpt -Ba1:."Height": -K > tmp.eps
psscale -D10/4/8/1 -Cpl.cpt -B/:"m": -O >> tmp.eps
awk '{if($1=="%%BoundingBox:" && $5>0){print $1, $2,$3, $4, $5+80}else{print $0}}' < tmp.eps > hp.eps

双曲放物面

psxy 同様,-Bオプションに「g」「a」の値を記述することにより, 目盛線,目盛数字を入れることができる. 目盛線の間隔を 2,目盛数字の間隔を 8 にして描いてみよう.

#!/bin/sh

grdimage hp.grd -Jx1 -Cpl.cpt -Ba1:."Height": -K > tmp.eps
psscale -D10/4/8/1 -Cpl.cpt -Bg2a8/:"m": -O >> tmp.eps
awk '{if($1=="%%BoundingBox:" && $5>0){print $1, $2,$3, $4, $5+80}else{print $0}}' < tmp.eps > hp.eps

双曲放物面

grdcontour で,間隔を合わせたコンターを入れると,かっこいい図になる.

#!/bin/sh

grdimage hp.grd -Jx1 -Cpl.cpt -Ba1:."Height": -K > tmp.eps
grdcontour hp.grd -J -C2 -A8 -O -K >> tmp.eps
psscale -D10/4/8/1 -Cpl.cpt -Bg2a8/:"m": -O >> tmp.eps
awk '{if($1=="%%BoundingBox:" && $5>0){print $1, $2,$3, $4, $5+80}else{print $0}}' < tmp.eps > hp.eps

双曲放物面

かっこいい図が描けたが,grdcontour の -C,-A と, psscale -B の a,g の値を同期させるのはちょっとめんどうかもしれない. 実は,grdcontour と psscale の -Cオプションに, 同じカラーパレットファイルを指定することで, 手軽にコンターとスケールの目盛を同期させることができる. grdcontour の -C の指定方法が 3種類あったことを覚えているだろうか (参考:いちからはじめる GMT その 18). grdcontour の -C にカラーパレットファイルを指定すると, カラーパレットの境界値にコンターが引かれるのだ. psscale でも,カラーパレットの境界値に目盛が描かれるので, 手っ取り早く同期を取ることができる.

今使っている pl.cpt は,間隔が粗すぎるので, 細かく区切りなおしたカラーパレットファイル pl2.cpt を作って,ためしてみよう.

#!/bin/sh

makecpt -Cpolar -T-16/16/2 -Z  > pl2.cpt
grdimage hp.grd -Jx1 -Cpl2.cpt -Ba1 -K > tmp.eps
grdcontour hp.grd -J -Cpl2.cpt -O -K >> tmp.eps
psscale -D10/4/8/1 -Cpl2.cpt -O >> tmp.eps
awk '{if($1=="%%BoundingBox:" && $5>0){print $1, $2,$3, $4, $5+80}else{print $0}}' < tmp.eps > hp.eps

双曲放物面

コンター間隔とスケールの目盛の同期がきちんととれた図ができた.


[ KDOホームにもどる ] [ いちからはじめる GMT インデックスにもどる ]


(C) 2009 KDO