デバイスを選択し、ビューポートとウィンドウを定義したら、いよいよ実際にビューポートに描かれるグラフの実体の作図にとりかかることが出来る。本章では、そのうちでもプリミティブ(primitives)と呼ばれる、最も基本的なルーチン群について説明する。PGPLOT には
の4種類のプリミティブがある。これらを実際のプログラムの中で用いる際には、線の色や種類、太さ、記号の種類や文字のフォント(字体)といった様々な属性の指定を伴うことが多い。この属性の仕方については、次の第5章で説明する。
前述のプリミティブは、ビューポートの境界で切り取られる。すなわち、定義したビューポートの外側にハミ出した部分は、描画されない。このことを、クリッピングと呼ぶ。
このクリッピングの「され方」は、プリミティブによって少しずつ異なる。「線」は、ビューポートの端と交差するところで切り取られる。「記号」は、その中心がビューポートの内側に入れば描かれる。端が入っていても中心がビューポート外にあれば、その記号は描かれない。「文字列」は、文字がビューポートの端にかからない限り、クリッピングされない。そして「閉領域の塗りつぶし」は、ビューポートの端で切り取られる(線と同じ扱い)。
線を引くための代表的なプリミティブ・ルーチンは PGLINE
である。このルーチンは、一つの線分、あるいは複数の繋がった線分を引くためのルーチンで、
CALL PGLINE (N, XPTS, YPTS)
のように CALL する。3つの引数は、各々
を表す。これにより、(XPTS(1),YPTS(1))−(XPTS(2),YPTS(2))−(XPTS(3),YPTS(3))−・・・・・−(XPTS(N-1),YPTS(N-1))−(XPTS(N),YPTS(N)) の合計 N 個の点が順に線分で結ばれる。
また、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つの引数を必要とする。これらは順に、
第4引数として指定する数と、描かれる記号の関係は、以下の通り:
Fortran の 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 方向のスケーリングが異なる場合、円はどちらかの方向につぶれて "楕円" のようになる。