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