第5章 グラフィックシステム

1. GPM の概要

GPM は,SATELLITE において,NCS,ISPP など他のモジュールを用いて処理,解析されたデータの可視化を担当するモジュールです.データ解析においては,データを単に推知の羅列として出力するだけでなく,可視化を行い多角的に検討する必要があります.そのために多様なグラフィック機能を提供し,効率的なグラフ作成を可能とするモジュールが GPM です.GPM は論文,レポート,OHP などのグラフ作成で大いに威力を発揮します.

GPM コマンドを機能で分類すると

  • グラフィックを描画する関数

  • 描画パラメータを設定する関数

の 2 つに大きくわけられ,約 30 種類の関数から構成されます.主な関数を 表 5.1. 「GPM コマンド」 に示します.描画関数には,

  • 1 次元データを表示するもの

  • 鳥瞰図,等高線図のように 2 次元データを表示するもの

など多くの関数があり,用途に応じて多様な表示が可能です.このようなグラフィックスを描画するためには,線種,線幅,描画色などの多くのパラメータが必要ですが,これらのパラメータは," ltype() "," lwidth() "," color() "といったパラメータ設定関数で設定します.描画パラメータは,コマンドラインから会話的に設定でき,パラメータの種類,順序を知らなくても効率的にグラフを作成できます.描画色 (0 から 7) は,数値以外に 表 5.2. 「描画色」 のように数値に対応するカラー名を指定してもかまいません (全て大文字もしくは小文字で記述してください).

また,SATELLITE 起動時に描画パラメータは初期化され,デフォルト値が与えられます.

表 5.1. GPM コマンド

ウィンドウ関係
wopen ウィンドウを開く
wclose ウィンドウを閉じる
we 画面を消去する
newpage 改ページする
chwin 描画先のウィンドウを設定する
グラフ関係
graph グラフを描く
axis 座標軸を描く
draw 指定したレベルのラインを描く
frame グラフ枠を描く
label 文字列を表示する
グラフィックス描画関数
line 線分,矩形を描く
2 次元データ描画関数
cont 2 次元データを等高線で表示する
gsolm 2 次元データを鳥瞰図で表示する
map 2 次元データをマップ表示する
パラメータ設定関数
color グラフ,フレームの描画色を設定する
factor 描画するグラフィックスの倍率を設定する
font 文字のフォントを設定する
ltype 線の種類を設定する
lwidth 線の幅を設定する
origin グラフの原点を設定する
scale グラフの表示範囲を設定する
size グラフの大きさを設定する
title グラフ座標軸のタイトルを設定する
その他の関数
ginit 描画パラメータを初期化する
gstat 現在の描画パラメータを確認する

表 5.2. 描画色

数値 カラー名
0 black
1 blue
2 red
3 mazenta
4 green
5 cyan
6 yellow
7 white

2. GPM の使用方法

GPM を使用する上で必要なこととして,

  • ウィンドウの操作方法

  • プリンタへの出力方法

が挙げられます.図形,グラフを描画するためには,ウィンドウを開く必要があり,"wopen" を用います.反対にウィンドウを閉じる関数は "wclose" です.ウィンドウは複数開くことが可能で,書き込み先のウィンドウを設定する関数は "chwin" です.ただし,複数ウィンドウに同時に書き込むことはできません.

さて,GPM コマンドにより作成したグラフは視覚的に確認するだけでなく,ファイルとして保存し,プリンタに出力できることが望まれます.ウィンドウ上のグラフをプリンタに出力する場合は,

% gpm2ps > filename
% lpr -Pps filename

としてください."gpm2ps" は GPM が出力した中間ファイル (グラフィックデータ) を PS ファイル (グラフィックデータをプリンタが解釈できる形式) に変換するコマンドです.PS ファイル変換後は,Tgif などで読み込むことができます."lpr" はプリンタにファイルの内容を送るコマンドです.作成したグラフを Tex などで eps ファイルとして利用したい場合は,

% gpm2eps > filename

としてください.

次に,簡単な例題により主な GPM コマンドの使用方法を説明します.詳しい使用方法についてはリファレンスマニュアルをご覧ください.

2.1. 1 次元データの表示

●例題 1 : 正弦波 (sin 関数) の表示

[]SATELLITE[]~/home/demo:[1]% wopen(1,"A4",0,1)
[]SATELLITE[]~/home/demo:[2]% t = (0~100) / 100
[]SATELLITE[]~/home/demo:[3]% y = sin(2 * PI * t)
[]SATELLITE[]~/home/demo:[4]% scale("N","A","N","A")
[]SATELLITE[]~/home/demo:[5]% graph(y,t,0,0,0,0,0)
[]SATELLITE[]~/home/demo:[6]% frame()
[]SATELLITE[]~/home/demo:[7]% axis(1,1,"XY","XY",5,0,0,0,0,0)

上述のリストは,直接コマンドラインより打ち込んでもよく,ファイルにしてインライン展開させても実行可能です.まず,グラフを描画するためには,ウィンドウを開く必要があります.1 行目の "wopen" がウィンドウを開く関数です.表示した図をプリンタに表示したい場合,またはファイルに保存したい場合は,最後の引数を 1 に設定します.プリンタに出力しない場合には 0 に設定してください (デフォルト値は 0 です).

注意 : 最後の引数を 2 に設定した場合は,ファイルのみの出力になります.

4 行目でグラフ軸の種類とスケールを決定しています.グラフ軸の種類は N (linear) と L (log) の 2 つがあり,X 軸,Y 軸ともに N を選択しています.引数の A (auto) はスケールの自動設定です.特に "scale" で設定しない場合は自動設定となります.スケールを固定してグラフ表示したい場合には,引数を F (fix) とし,関数の引数の 5,6 番目に X 軸の最小値,最大値もしくは Y 軸の最小値,最大値を記述するか,記述を省略した場合には値の入力を促しますので,直接,X 軸,Y 軸の最小,最大値を入力してください.5 行目で x と y の関係をグラフ表示,6 行目でグラフ枠,7 行目でグラフ軸を表示しています.この手順により作成したグラフを 図 5.1. 「例題 1 の出力結果」 に示します.このグラフでは,特に色の設定を行っていないため,初期設定値の黒色で表示されます.色を変更する場合は,"graph" 関数実行前に "color" 関数を実行してください."color" 関数では,描画色とフレーム色が指定できます.

なお,ウィンドウ画面を消去する関数は,"we" です.

例題 1 の出力結果

図 5.1. 例題 1 の出力結果

●例題 2 : 振幅,周波数が異なる 2 つの正弦波の表示

[]SATELLITE[]~/home/demo:[1]% wopen(1,"A4",0,1)
[]SATELLITE[]~/home/demo:[2]% sx = 80
[]SATELLITE[]~/home/demo:[3]% sy = 80
[]SATELLITE[]~/home/demo:[4]% origin(40,40)
[]SATELLITE[]~/home/demo:[5]% size(sx,sy)
[]SATELLITE[]~/home/demo:[6]% title(1,"time","f(t)")
[]SATELLITE[]~/home/demo:[7]% t = (0~100) / 100
[]SATELLITE[]~/home/demo:[8]% y1 = sin(PI * 5 * t)
[]SATELLITE[]~/home/demo:[9]% y2 = 0.5 * sin(2 * PI * 5 * t)
[]SATELLITE[]~/home/demo:[10]% scale("N","F","N","F",0,1.0,-1.2,1.2)
[]SATELLITE[]~/home/demo:[11]% lwidth(1,2)
[]SATELLITE[]~/home/demo:[12]% graph(y1,t,0,0,0,0,0)
[]SATELLITE[]~/home/demo:[13]% lwidth(2,2)
[]SATELLITE[]~/home/demo:[14]% graph(y2,t,0,0,0,0,0)
[]SATELLITE[]~/home/demo:[15]% axis(1,1,"XY","XY",5,0,0,0,0,0)
[]SATELLITE[]~/home/demo:[16]% lwidth(1,2)
[]SATELLITE[]~/home/demo:[17]% ltype(1,2)
[]SATELLITE[]~/home/demo:[18]% line(0,sy / 2,sx,sy / 2)
[]SATELLITE[]~/home/demo:[19]% ltype(1,1)
[]SATELLITE[]~/home/demo:[20]% frame()

例題 2 では,グラフの重ね合わせ,X 軸,Y 軸タイトルの表示,原点座標の指定,グラフサイズの設定,グラフ曲線の太さを指定しています.具体的には,4 行目で原点座標の指定,5 行目でグラフサイズの設定,6 行目でタイトル名を設定しています.ここでは,振幅の異なる波形を重ねるために,"scale" の設定を F (fix) としています.1 番目の波形を A (auto) で表示し,そこに 2 番目の波形を同じスケールで描画する場合は,D (default) として下さい.11,13 行目では線幅の設定を行っています.18 行目の "line" 関数の座標は相対座標で,基準位置は,"origin" で設定した場所です."origin" には,ウィンドウの左下を原点とした絶対座標の値 (ウィンドウのマウスカーソルを移動すると表示される数値) を入力します.ここでは,17 行目の "ltype" により線種を破線とし,y = 0 の直線を引いています.例題 2 の出力結果を 図 5.2. 「例題 2 の出力結果」 に示します.

例題 2 の出力結果

図 5.2. 例題 2 の出力結果

2.2. 2 次元データの描画

●例題 3 : 乱数データの 2 次元表示

[]SATELLITE[]~/home/demo:[1]% x = nrand(128,1,0,1)
[]SATELLITE[]~/home/demo:[2]% y = reform(x,(16,8))
[]SATELLITE[]~/home/demo:[3]% wopen(1,"A4",0,1)
[]SATELLITE[]~/home/demo:[4]% size(80,80)
[]SATELLITE[]~/home/demo:[5]% origin(20,200)
[]SATELLITE[]~/home/demo:[6]% gsolm(y,0.3,0.4,0,0,0,0,-1,1,1,"Y",1,1,5)
[]SATELLITE[]~/home/demo:[7]% origin(20,100)
[]SATELLITE[]~/home/demo:[8]% cont(y,0.3,"X",1,1)
[]SATELLITE[]~/home/demo:[9]% frame()
[]SATELLITE[]~/home/demo:[10]% origin(120,200)
[]SATELLITE[]~/home/demo:[11]% color("green","red")
[]SATELLITE[]~/home/demo:[12]% map(y,"X",1,0,1)
[]SATELLITE[]~/home/demo:[13]% color("black","black")
[]SATELLITE[]~/home/demo:[14]% frame()
[]SATELLITE[]~/home/demo:[15]% origin(120,100)
[]SATELLITE[]~/home/demo:[16]% map(y,"X",0,0,1)
[]SATELLITE[]~/home/demo:[17]% frame()

例題 3 では,1 次元の正規乱数データを 2 次元データに変換し,鳥瞰図表示,等高線表示,MAP 表示,カラー MAP 表示を行います.データを変換する関数は 4 行目の "reform" で 128 点の 1 次元データを 16×8 の 2 次元データとしています.6 行目では 2 次元データを鳥瞰図表示しています.この例では,グラフに隠線処理を行っています.詳細はリファレンスマニュアルを参照して下さい.8 行目では等高線表示をしています.12,16 行目では,MAP 表示を行っています."map" 関数には,データ値を最小値から最大値の間に正規化し,個々のデータ値をパターンのサイズに対応させ表示する方法と色に対応させる方法の 2 つがあります.例題 3 の出力結果を 図 5.3. 「例題 3 の出力結果」 に示します.

例題 3 の出力結果

図 5.3. 例題 3 の出力結果

●例題 4 : 時系列データの表示

[]SATELLITE[]~/home/demo:[1]% wopen(1,"A4",0,1)
[]SATELLITE[]~/home/demo:[2]% sampling(1000*10)
[]SATELLITE[]~/home/demo:[3]% size(80,80)
[]SATELLITE[]~/home/demo:[4]% x = nrand(1000,1,0,1)
[]SATELLITE[]~/home/demo:[5]% origin(20,200)
[]SATELLITE[]~/home/demo:[6]% title(1,"time[msec]","value")
[]SATELLITE[]~/home/demo:[7]% scale("N","A","N","A")
[]SATELLITE[]~/home/demo:[8]% graph(x,"T",0,0,0,0,0)
[]SATELLITE[]~/home/demo:[9]% axis(1,1,"XY","XY",5,0,0,0,0,0)
[]SATELLITE[]~/home/demo:[10]% frame()
[]SATELLITE[]~/home/demo:[11]% label("I",20,70,5.0,0,"example4")

SATELLITE で,生体信号の解析等を行う場合,扱うデータとして時系列データが多く含まれます.そこで,例題 4 では,1000 点の正規乱数データを発生させ,それを 100[msec] 間に得られたデータと仮定し,時間軸表示させることを考えます.ここでは,1000 点のデータを時間軸 (100[msec]) と対応させるために,2 行目の "sampling" で 10 倍のサンプリングを行っています.サンプリング周波数の初期設定値は 1000 です.8 行目では X 軸の引数を T (time) としてグラフ表示しています.データ点をそのまま表示したい場合は D (data) としてください.11 行目では,"label" 関数によって文字列の表示を行っています.表示座標の指定は,"line" 関数と同様に相対座標です.また,"label" 関数によって表示される文字種は "font" で指定します.

例題 4 の出力結果

図 5.4. 例題 4 の出力結果

Last updated: 2005/11/12