座標軸

ここでは GRPH2 のパッケージのうち座標軸描画に関連する U[XYZ]PACK/ULPACK/UCPACK の基本的な機能を紹介しましょう.これらのパッ ケージを使うと数行のサブルーチンコールで多種多様な座標軸を描くことがで きます.これらは序の口で,さらに凝った座標軸を描くこともできますが,そ れらについては次章で説明しましょう.

なお,以下のプログラム例では,GRPACK を用いて初期化や改ページなどの操 作をおこなっていますから,初期化ルーチンUZINITは陽に呼ばなくても よいようになっています.

線形座標軸

まず,最も簡単なプログラム例 UXYZ1 を見てみましょう. UXPACK/UYPACK のサブルーチンを使って,x軸,y軸ともに線形座標軸(均等 な目盛り)を描き,それぞれの軸には目盛りとラベル(目盛りのところにつける 数字), およびタイトル(軸の説明)をつけます.また,図のタイトルもつける ことにします.

uxyz1/uxyz1.f


uxyz1.f: frame1

まず,座標軸関連のパッケージを使用するときには,ウインドウとビューポー ト(第[here]節)が適切に設定されていなければなりません.そし て,座標軸の作画を行なうにあたって最も基本的なことは,1本の座標軸(1本 の軸とそれに付ける目盛りおよびラベルによって構成される)を描くために作 画ルーチンを1回呼ぶということです.この例では,上下左右あわせて4回作画 ルーチン(x軸は UXAXDV, y軸は UYAXDV)を呼んでいます. 最初の引数 'B', 'T', 'L', 'R'によって,それぞ れ,下,上,左,右側の軸を描画することを指定します. 座標軸を描くこれ らの場所は,ウインドウとビューポートを設定した矩形領域のちょうど境界線 上になります.次の2つの引数では,短い目盛りと長い目盛りをどんな間隔で 打つかをU-座標系の値で指定します.ラベルは,長い目盛りのところにだけ描 かれます.

軸につけるタイトルおよび図のタイトルも,それぞれの軸についてタイトル描 画ルーチンを呼びます.小さめの文字でタイトルを描きたいときは UXSTTL, UYSTTL ルーチンを,大きめの文字で描きたいときには UXMTTL, UYMTTL ルーチンを用います.最初の引数によってタイトルを つける軸の場所を指定します.2番目の引数はタイトルとして描く文字列です. 最後の引数では,タイトルを描く位置を-1.0から1.0までの実数値で指定し ます.たとえばx軸については,-1.0: 左寄せ,0.0: 中央合わせ,1.0: 右寄せとなり,またy軸については,-1.0: 下寄せ,0.0: 中央合わせ, 1.0: 上寄せとなります.この例の下側x軸や左側y軸のように,同じ軸に 対して2回以上タイトル描画ルーチンを呼んだときには,タイトルが重ならな いようにだんだんと外側の方へずらして描かれます.

言われるままに作画してみて,「はて,タイトルやラベルの大きさ,目盛の長 さなどは一体どのように決まっているのだろか?」と,不思議に思うかもしれま せん.じつはこれらの属性は,UZPACK の管理する内部変数を参照して決めら れているのです. ふつうの用途には,これらで充分に満足できる座標軸が作 画できるでしょう.タイトルの大きさやその描く向きなどを指定して独自の座 標軸を作ることもできますが,それは次章にまわしましょう.

対数座標軸

次のプログラム UXYZ2 は対数座標軸の例です. 対数座標軸の描画は ULPACK が担当しています.

uxyz1/uxyz2.f


uxyz2.f: frame1

対数座標軸を描くには,まず GRSTRN ルーチンによって対数変換をあら わす変換関数番号を設定します. 変換関数番号についてはすでに第 [here]節で説明しましたが,1: 直角一様座標(線形座標), 2: 片対数(y軸)座標,3: 片対数(x軸)座標,4: 両対数座標です.

対数座標軸を描くサブルーチンは ULXLOG, ULYLOGです.ここで も,最初の引数で座標軸を描く場所を指定します. 2番めの引数は,1桁の範 囲に描くラベルの数であり,x軸については1となっていて,10^nのところ にのみラベルが描かれます.また,y軸については3となっていて,10^n以 外にも2 10^n, 5 10^nにラベルが描かれてます.この引数 が2ならば,10^nと2 10^nにラベルが描かれます.最後の引数は, 1桁の範囲に描く目盛りの数です.ここでは1から9まですべての目盛を打つよ うに,9を指定しています.8以下の場合には,目盛間隔の狭いところから省か れます.

これはうれしい日付軸

長年にわたるデータを解析した人なら,日付軸をつけることの面倒くささは十 分ご承知でしょう.UCPACK を用いると,閏年まで考慮した完璧な日付軸を容 易に作画することができます(UXYZ3).

uxyz1/uxyz3.f


uxyz3.f: frame1

まず,作画しようとする座標軸については,日数を単位として正規化変換を設 定する必要があります.また,座標軸の作画は,U-座標系において0に相当す る位置からおこなわれますから,この例の場合のように1996年1月1日から3月 31日まで91日分をビューポートいっぱいに割り当てたいときには,ウインドウ の両端値を UXMIN が 0.0, UXMAXRND(= 90)と指定し ます(12行め).

日付に関する座標軸は,サブルーチン UCXACL, UCYACL で簡単に 描けます.最初の引数では,これまで通り,座標軸を描く場所を指定します. 2番めの引数 ID0 は起日, つまり座標軸を描きはじめる最初の日です. 3行めのパラメータ文をみれば明らかなように,8桁の整数(yyyymmdd)で指定 します.yyyyが年,mmが月,ddが日で,この場合 ID0=19960101 ですから,起日は1996年1月1日となります.最後の引数では,何日間分を描く かを指定します.

中途半端なウインドウ

ウインドウの最小値・最大値は必ずしも切りのよい値でなくても大丈夫です. UXYZ4 のプログラム例では,x軸については-50から50の範囲で, y軸については1000から0.4の範囲でウインドウを設定しています. このと き,UXAXDV はきざみ値の整数倍となるところに目盛とラベルを描きま す.また,ULYLOG は10^nから10^n+1を1サイクルとして目盛とラ ベルを描きます.このように,目盛やラベルは切りのよいサイクルを単位とし て作画がおこなわれます.さらに,好みの間隔で目盛をうち,好みのところに ラベルを描きたい場合は,次章を見て下さい.

なお,この例では,ULYLOG を用いて対数座標軸を描画する際に,ULISET ルーチンで整数型内部変数 'IYTYPE' を3に変更してラベルの 書式を変えました.対数軸に付けるラベルの書式は全部で4種類用意されてい ます.

uxyz1/uxyz4.f


uxyz4.f: frame1


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:11:53 EDT 1995