デバイスを選択し、ビューポートとウィンドウを定義したら、いよいよ実際にビューポートに描かれるグラフの実体の作図にとりかかることが出来る。本章では、そのうちでもプリミティブ(primitives)と呼ばれる、最も基本的なルーチン群について説明する。PGPLOT には
前述のプリミティブは、ビューポートの境界で切り取られる。すなわち、定義したビューポートの外側にハミ出した部分は、描画されない。このことを、クリッピングと呼ぶ。
このクリッピングの「され方」は、プリミティブによって少しずつ異なる。「線」は、ビューポートの端と交差するところで切り取られる。「記号」は、その中心がビューポートの内側に入れば描かれる。端が入っていても中心がビューポート外にあれば、その記号は描かれない。「文字列」は、文字がビューポートの端にかからない限り、クリッピングされない。そして「閉領域の塗りつぶし」は、ビューポートの端で切り取られる(線と同じ扱い)。
線を引くための代表的なプリミティブ・ルーチンは PGLINE
である。このルーチンは、一つの線分、あるいは複数の繋がった線分を引くためのルーチンで、
CALL PGLINE (N, XPTS, YPTS)のように CALL する。3つの引数は、各々
また、PGMOVE
と PGDRAW
という2つのルーチンを組み合わせても、PGLINE
と同じことができる。これら2つのルーチンでは、プロッタの動作を思い浮かべれば理解しやすいが、常にペンの"現在"位置を意識して線が引かれる。
PGMOVE
は、現在の位置から引数で指定した位置まで "ペンを上げて" 移動するためのルーチンで、
CALL PGMOVE ( XP, YP )のように CALL する。2つの引数は順に、移動先の x 座標と y 座標である(いずれも実数)。次に、
PGDRAW
は、現在の位置から引数で指定した位置まで "ペンを下ろして" 移動するためのルーチンで、これにより、2つの点を結ぶ線分が描かれる。
先に示した
CALL PGLINE (N, XPTS, YPTS)は、
PGMOVE
と PGDRAW
を使って
CALL PGMOVE (XPTS(1), YPTS(1)) DO I=2,N CALL PGDRAW (XPTS(I), YPTS(I)) END DOのように書き換えることも出来る。
グラフマーカとは、十字、点、円といった記号を意味する PGPLOT の用語である。PGPT
を使えば、一つ又は複数のグラフマーカを指定した位置に描くことができる。このルーチンは
CALL PGPT (N, XPTS, YPTS, NSYM)のように4つの引数を必要とする。これらは順に、
ICHAR
関数を使うと、書きたい文字の ASCII 配列を得ることが出来る。たとえば、F の文字を書きたい時は、
CALL PGPT (1, 0.5, 0.75, ICHAR('F') )のように CALL すれば良い。
PGPLOT で文字列を書く時に用いられる最も単純なルーチンは PGTEXT
である。
CALL PGTEXT (X, Y, 'A text string')のように用い、これによりワールド座標上で (x,y) の位置を始点とする、水平の文字列
A text string
が描かれる。
PGTEXT
は実は、より一般的なプリミティブ・ルーチン PGPTXT
への窓口となっている。PGPTXT
を使うと、文字列の向きや位置揃えを好みに合わせて変更することが出来る。たとえば、
CALL PGPTXT (X, Y, 45.0, 0.5, 'A text string')とすると、ワールド座標上で (x,y) の点を中心とする、水平方向に対して 45 度傾いた向きの文字列が描かれる。
PGTEXT
と PGPTXT
では共に、文字列を描く位置をワールド座標系で指定する。しかし例えばグラフに注釈を付ける場合など、ワールド座標ではなくビューポート(デバイス座標)上で文字の位置を指定した方が便利な時もある。PGMTXT
はこれを可能とするルーチンである。図にタイトルなどを付ける場合に用いられる PGLAB
では、この PGMTXT
を呼び出してグラフに注釈をつけている。
文字列についても、その高さや字体など、属性を変更することができる。これについては第5章で詳しく説明するが、Figure 4.2 にも、その例の幾つかを示しておく。
一つ又は複数のグラフマーカ(ただし 0〜32 番目)を文字列の一部として含ませたい場合は、Fortran の CHAR
関数を用いて
CALL PGTEXT (X, Y, 'Points marked with '//CHAR(17))のように指定すれば良い。ちなみに、上の例の第3引数に含まれる "//" は、文字(列)同士をつなぐ時の Fortran の文法である。
PGPTXT
や、(たとえば PGTEXT
や PGLAB
のように)これ此を内部で呼び出すルーチンでは、書かせたい文字列の中に以下に示すようなエスケープ・シーケンス(escape sequences)を含ませることができる。このエスケープ・シーケンス自体は描かれないが、フォントを変えたり、添え字や肩字を書いたり、あるいは ASCII 文字以外の文字(ギリシャ文字など)を書かせるための命令として解釈される。
すべてのエスケープシーケンスは、バックスラッシュ(\
) で始まる。PGPLOT では次のようなエスケープ・シーケンスが定義されている(\
に続く文字は大文字でも小文字でも構わない)。
\u | 肩字(上付き字)を開始する。あるいは添え字(下付き字)を終了する |
\d | 添え字(下付き字)を開始する。あるいは肩字(上付き字)を終了する |
\b | バックスペース(すなわち、前の文字を描いた後、テキストポインタを進めない) |
\fn | ノーマル・フォント (1) に切り替える |
\fr | ローマン字体 (2) に切り替える |
\fi | イタリック字体 (3) に切り替える |
\fs | スクリプト字体 (4) に切り替える |
\\ | バックスラッシュ文字 (\) を描く |
\x | 掛け算記号 |
\. | ・ |
\A | オングストローム記号(Å) |
\gx | x で指定したローマ字に対応するギリシャ文字。Figure 4.3 参照 |
\mn \mnn |
n または nn (1-31) 番目のグラフマーカ。Figure 4.1 参照 |
\(nnnn) | character number nnnn (1 to 4 digit number) from the Hershey character set; the closing parenthesis may be omitted if the next character is neither a digit nor ``)''. This makes a number of special characters (e.g., mathematical, musical, astronomical, and cartographical symbols) available. See Appendix B for a list of available characters. |
矩形やそれ以外の多角形、円などの閉領域を塗りつぶすためのプリミティブである。塗りつぶしのスタイルや色などは、fill area style や color index といった属性を変更することで変えられる。これについては第5章で説明する。
PGPOLY
ルーチンは、多角形で定義される閉領域を塗りつぶす時に用いられる。
CALL PGPOLY (N, XPTS, YPTS)のように3つの引数をとり、それらは各々
多角形の中でも辺が座標軸と平行であるような矩形を描く場合は、PGPOLY
を使うよりも PGRECT
を使う方が便利である。PGRECT
は
CALL PGRECT (X1, X2, Y1, Y2)のように4つの引数をとり、それらは順に
さらに、円を描きたい場合は PGIRC
を使うと良い。このルーチンは
CALL PGCIRC (X, Y, RADIUS)のように CALL する。3つの引数のうち、最初の2つは中心点の x, y 座標で、最後の引数はワールド座標系における円の半径である。指定したワールド座標系の x, y 方向のスケーリングが異なる場合、円はどちらかの方向につぶれて "楕円" のようになる。