いちからはじめる GMT その52 - psxy -Sk

2011年 7月 1日 掲載


その40 のメルカトル図法から 5ヶ月,ずっと地図の投影法をあつかってきたが, ここらで気分を変えて,別の記事を書くことにしたい. 今回は,ひさしぶりに psxyコマンドのオプションをあつかうことにする.

psxyコマンドでは,-Sオプションでいろいろなシンボルをプロットすることができるが, -Skオプションを使うと,自分で作ったオリジナルのシンボルを使うことができる. まずは man psxy の -Sk の項を読んでみよう.

-Sk    kustom symbol.  Append <name>/size, and we will look for a defi-
       nition  file  called  <name>.def in (1) the current directory or
       (2) in ~/.gmt or (3) in  $GMT_SHAREDIR/custom.   The  symbol  as
       defined  in  that  file  is of size 1.0 by default; the appended
       size will scale symbol accordingly.  Users  may  add  their  own
       custom *.def files; see CUSTOM SYMBOLS below.

-Sk に <name> と size を「/」で区切って指定すると, <name>.def という定義ファイルにしたがって,size の大きさのシンボルをプロットするようだ. 定義ファイル <name>.def は,

  1. カレントディレクトリ
  2. ~/.gmt ディレクトリ
  3. $GMT_SHAREDIR/custom ディレクトリ

の順に探されるとのこと. 定義ファイルの書き方は CUSTOM SYMBOLS の項を見るように書いてある. man psxy の下の方に書いてあるので,そちらも読んでみよう.

CUSTOM SYMBOLS
       psxy and psxyz allows users to define and plot their  own  custom  sym-
       bols.  This is done by encoding the symbol using a simple plotting code
       described below.  Put all the plotting codes for your new symbol  in  a
       :
       :
       $GMT_SHAREDIR/custom directory, in that order.  Freeform polygons (made
       up of straight line segments and arcs of circles)  can  be  designed  -
       these  polygons  can be painted and filled with a pattern.  Other stan-
       dard geometric symbols can also be used. Generate freeform polygons  by
       starting with an anchor point (append [ -Wpen ] and [ -Gfill ] to indi-
       cate pen and fill attributes):
            x0   y0   M
       and draw a straight line from the current point to the next point with
            x    y    D
       or add an arc by using
            xc   yc   r    dir1 dir2 A
       When a record other than the D or A  is  encountered,  the  polygon  is
       closed  and  considered  complete.   The  optional pen and fill setting
       :
       :

いろいろ書いてあるが, 今回は簡単に直線で構成された多角形でシンボルを作る方法を解説する.

定義ファイル <name>.def は,xy座標値と命令記号が書かれたテキストファイルである. ここで,xy座標値はプロットする点からの相対値である. 大きさはプロット時に size倍される. 他のシンボルと合わせ,直径 1 の円(-Sc)に内接するように作るのがよいだろう.

多角形を描画する際には,まず始点を指定する必要がある. 座標 (x0, y0) を始点とする場合,

x0 y0 M

と書く.ここから座標 (x1, y1) まで線を引くには,

x1 y1 D

とつづける.線をつづけて引く場合は,

x2 y2 D
x3 y3 D
:
:
xn yn D

とつづけていく. 始点 (x0, y0) と終点 (xn, yn) は一致させなくても, プロット時に多角形は閉じられる.

では,実際にやってみよう. 今回は,外サイクロイドでシンボルを作ってみる (参考:サイクロイド - Wikipedia). まずは,外サイクロイドの座標データセットを作る, 以下のような AWKスクリプト epicycloid.awk を書いてみた.

BEGIN{
  for(deg = 0; deg <= 360 * n; deg += 2){
    rad = deg * 3.1415 / 180
    x = (rc + rm) * cos(rad) - rm * cos((rc + rm) / rm * rad)
    y = (rc + rm) * sin(rad) - rm * sin((rc + rm) / rm * rad)
    print x, y
  }
}

このスクリプトには,-vオプションで,

を指定する必要がある. rc:rm = 5:1 の外サイクロイドのデータを作って描画してみよう.

$ awk -v rc=0.35 -v rm=0.07 -v n=1 -f epicycloid.awk > epicycloid.txt
$ cat epicycloid.txt
0.35 0
0.351274 0.000103961
0.355028 0.000826081
0.361067 0.00275675
:
:
$ psxy epicycloid.txt -Jx4 -R-1/1/-1/1 -W3 -Ba0.5g0.5 > epicycloid.eps

外サイクロイド

この形のシンボルを作るには,1行目に「M」,2行目以降に「D」を付して, 〜.def というファイルに保存すればよい. AWK を使えば簡単である.

$ awk 'NR==1{print $0, "M"}NR>1{print $0, "D"}' epicycloid.txt > epicycloid.def
$ head epicycloid.def
0.35 0 M
0.351274 0.000103961 D
0.355028 0.000826081 D
0.361067 0.00275675 D
0.369072 0.00643201 D
0.378618 0.0123094 D
0.389189 0.0207472 D
0.400205 0.031988 D
0.411044 0.0461475 D
0.421072 0.0632083 D

出きあがったシンボルを描画してみよう.

$ echo 0 0 | psxy -Jx4 -R-1/1/-1/1 -Skepicycloid/4 -W3 -Ba0.5g0.5 > epicycloid.eps

外サイクロイド

おお,ちゃんと外サイクロイドの形になっている.

では,さっそく今作ったオリジナルのシンボルを,実際のプロットに使ってみよう.

$ awk 'BEGIN{for(deg=0; deg<=720; deg+=30){rad=deg*3.1415/180; print rad-sin(rad), 1-cos(rad), deg%360}}' > cycloid.txt
$ makecpt -Ccyclic -Z > c.cpt
$ psxy cycloid.txt -Jx1.5 -R-1/13/-1/3 -Skepicycloid/1 -Cc.cpt -Ba1g1 > cycloid.eps

サイクロイド

外サイクロイドのシンボルで,サイクロイドをプロットしてみた. ここしばらく,モノクロの地図がつづいたので,ちょっとカラフルな図にしてみた.


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


(C) 2011 KDO