いちからはじめる GMT その5 - psxy -M

2008年 10月 1日 掲載


今回は逆数のグラフを描いてみる. さっそく awk でデータファイルを作ってみよう.

$ awk 'BEGIN{for(x=-4;x<=4;x+=0.25)print x, 1/x}' > x-1.txt
awk: division by zero
 source line number 1

っと,ゼロ除算エラーが出てしまった. ファイル x-1.txt は,x=0 の値を出力しようとしたところで止まってしまっている.

x<0 と x>0 の 2つの場合の出力を合成することにしよう.

$ awk 'BEGIN{for(x=-4;x<0;x+=0.25)print x, 1/x}' > x-1.txt
$ awk 'BEGIN{for(x=0.25;x<=4;x+=0.25)print x, 1/x}' >> x-1.txt

「>>」で出力が既存のファイルへ追加される.

できあがったデータファイルで,図を描いてみる.

$ psxy x-1.txt -R-4/4/-4/4 -Jx1 -Bg1a1 > x-1.eps

逆数のグラフ

x が負の部分と正の部分が,直線で結ばれてしまった. これはまずい.どうしよう.

psxyコマンドは,入力ファイルを複数指定することができる. x<0 と x>0 の出力を別々のファイルに保存して図化すれば,この問題は回避できそうだ.

$ awk 'BEGIN{for(x=-4;x<0;x+=0.25)print x, 1/x}' > x-1a.txt
$ awk 'BEGIN{for(x=0.25;x<=4;x+=0.25)print x, 1/x}' > x-1b.txt
$ psxy x-1a.txt x-1b.txt -R-4/4/-4/4 -Jx1 -Bg1a1 > x-1.eps

逆数のグラフ

期待どおりの図ができた.

しかし,1つの関数のデータが 2つのファイルにわかれているのは,あまり気持ちよくない. 何とかならないだろうか.

man psxy を調べてみると,-Mオプションを追加することにより, 区切り文字「>」でデータを分割したファイル(Multiple segment file)を扱うことができるようだ. やってみよう.

$ awk 'BEGIN{for(x=-4;x<0;x+=0.25)print x, 1/x}' > x-1m.txt
$ echo ">" >> x-1m.txt
$ awk 'BEGIN{for(x=0.25;x<=4;x+=0.25)print x, 1/x}' >> x-1m.txt

x<0 の出力と x>0 の出力の間に,echoコマンドで「>」を挿入している.

図化するときには -Mオプションを忘れないようにしよう(忘れるとエラーが出る).

$ psxy x-1m.txt -R-4/4/-4/4 -Jx1 -Bg1a1 -M > x-1m.eps

逆数のグラフ

ちゃんと逆数のグラフができた.

逆数の例では,2本の線を引くだけだったが, もっとたくさんの線を引くこともできる.

ためしに,文章なんかを書いてみよう. たとえば,こういうファイル gmt05_message.txtを図化すると,

$ psxy gmt05_message.txt -R0/17.5/0/4 -Jx1 -M > message.eps

こうなる↓.

オカエリナサイ


パッと思いついたのが,20年前のアニメのネタだったりして, ずいぶん歳をとったなあ,とか思いつつ次号へつづく.


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


(C) 2008 KDO