%表題   らくらく電能ライブラリ
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%\Dchapter{座標軸}
\Dchapterhead

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

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

%-----------------------------------------------------------------------
\section{線形座標軸}

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

\Dproginput{uxyz1/uxyz1.f}
\vspace*{2em}

\begin{center}
\Depsf[10cm]{uxyz1/uxyz1_0001.eps}\\
{\bf uxyz1.f: frame1}\\
\end{center}

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

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

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


%-----------------------------------------------------------------------
\section{対数座標軸}

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

\Dproginput{uxyz1/uxyz2.f}

\begin{center}
\Depsf[10cm]{uxyz1/uxyz2_0001.eps}\\
{\bf uxyz2.f: frame1}\\
\end{center}

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

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


%-----------------------------------------------------------------------
\section{これはうれしい日付軸}

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

\Dproginput{uxyz1/uxyz3.f}

\begin{center}
\Depsf[10cm]{uxyz1/uxyz3_0001.eps}\\
{\bf uxyz3.f: frame1}\\
\end{center}

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

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


%-----------------------------------------------------------------------
\section{中途半端なウインドウ}

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

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

\Dproginput{uxyz1/uxyz4.f}

\begin{center}
\Depsf[10cm]{uxyz1/uxyz4_0001.eps}\\
{\bf uxyz4.f: frame1}\\
\end{center}
