 によるグラフ描画
西村竜一
東北大学電気通信研究所ブレ インコンピューティング研究部門

 はじめに
東北大学情報シナジーセンターで提供している  は、数値解析ソフトウェアです。ソフトウェアと言いましても、それ自身でプログラムを記述することも可能ですので、ある種のプログラミング言語と解釈していただいても構いません。インタープ リタ型であることから、

 や のように、初心者にも比較的簡単に使い始めることができます。また、様々な研究分野のそれぞれで利用される関数群のライブラリも、  という  の拡張モジュールとして存在しているため、自分の研究のためのライブラリを自作する必要がありません。ちなみに 、東北大学情報シナジーセンターの  には、  のほとんどが組込まれています。インタープ リタ型ですので、これら の各関数もソースコード の形を取っています。したがって、実際の処理アルゴ リズムを自分の目で追うことも可能です。さらに  の特徴的な点は、行列演算にあります。 言語をはじめ多くのプログラミング言語
では、行列を表現するときに配列を使用し 、演算する際も各要素毎の演算で記述する必要があります。しかし 、 では、行列  と行列  の積は、  と書けばよいのです。 でも、オペレータを利用することで同様なことができますが 、 がスカラ演算を基にして行列の演算を実現するのに対し 、 では全てを行列の演算で実現し 、スカラは  の行列と解釈されます。 の数値演算ソフトウェアとしての利用法については、既に多くの書籍が出版されています  。そこで、本稿では 、 のもうひとつの機能について紹介して行こうと思います。

 の 肩書 として、「数値解析・ビジュアライゼーションソフトウェア」という文句がしばしば使われています。生産性高くシミュレーションや解析プログラムを作成できるという理由で  を利用されている方も少なくありませんが 、私はビジュアライゼーションツールとしてだけでも使う価値があると考えています。計算機の演算能力の飛躍的な躍進や、記録媒体の大容量化・低価格化に伴い、近年の研究は膨大な計算機シミュレーションデータや測定データに基づいて解析を行うスタイルに大きく様変わりし ました。これらの莫大なデータから、有意味な情報を人間が取り出すためには、データを可視化することが不可欠です。
は、この可視化を簡単に行うことができます。数値解析ソフトウェアとしての機能とともに、可視化の機能が充実していることが 、 を有用なものにしていると思われます。これらを組み合わせることにより、計算途中のデータ状況をグラフで確認しながら計算機シミュレーションを実行することも可能になります。このことは、プログラム開発の高速化に大きく役立つものでしょう。これまで、ネットワーク経由での画像の描画は、時間が掛かることを理由に敬遠されがちでしたが 、この問題も、学内ネットワークの高速化により次第に解消されつつあります。
一方、現在の研究者に求められるものは 、短期間で良い研究を遂行する能力だけではなく、そこで得られた知見を他の人に伝えるプレゼンテーションの能力も必要です。分かり易いプレゼンテーションをするには、見易いグラフが有効であることは言うまでもありません。初心者でも容易に それなり のものが実現できるソフトウェアは、えてして、それ以上のものを求めたときに極めて困難な状況に陥ります。ところが 、 のビジュアライゼーション機能は、容易にグラフを描けつつ、それ以上のものを求めたときにも、それに対応できる柔軟性をユーザに残しています。そこで本稿では、 での簡単なグラフの表示方法から、それを自由自在に自分のイメージ通りのグラフに変形する手法について紹介して行きます。
なお、本記事中における使用例のうち、太字で書かれいる部分は  の関数名、斜字体は任意の変数名か 右辺に出現した場合は  数字を表しています。

 で図形を描く の起動

まず、東北大学情報シナジーセンターで  を利用する手順について記しておきます。

 を数値演算のためだけに利用するのであれば 、どのような計算機環境を利用していても、サーバに接続さえできれば利用することができます。ただし 、グラフを描画するとなると事情が異なります。 で作成したグラフを描画するウィンド ウを開くために、 
システムを必要とします。! 環境を利用されている方は、まず間違いなく  を利用していると思いますが 、"  や  を利用されている方ですと、#  や $、 のような  サーバソフトが必要になります。また、接続コマンド も    や % ではなく、& を利用したほうが確実です。セキュリティ上の理由により、通常の  の通信を遮断しているネットワークが近年増えていますが 、& を利用することにより、そのような環境下でも  を利用することができます。東北大学情報シナジーセンターのアカウント名が '()の場合は、* & '()+% , ,&-., ,/0と入力します。すると、* '()1 0 2と表示されますので、'() 用のパスワード を入力して接続します。プロンプトが現れたら、* 3
で起動することができます。一瞬、 のウィンド ウが現れて消え 、 を起動した
ウィンド ウには、以下のような文字が書き出されます。

            !
"   #!$!!% &'  () *  +  ,
-     .    / 0 ' 1  ' .  .2!
3
.-  / 2  *   111!21 ! 2!

一番下の  が  のプロンプトになります。ここに  のプログラムを書いて行くと、リターンを押す度にその行が解釈され実行されます。 や バッチファイルのように、幾つものコマンド や関数をまとめて実行したい場合には、ファイルにそれを記述することも可能です。その場合は、拡張子を ,3 にしておきます。そうすると、 のプロンプトに対して、このファイル名から拡張子を除いた部分を入力することにより、ファイルの中身が実行されます。 を終了して、元のシェルに戻りたいときは、

 4.
を入力します。

折線グラフの描画

基本的な  次元の折線グラフを例にとり、実際にグラフを描いてみましょう。例えば 、表 に示す測定データをグラフ化することを考えます。最も簡単な描画方法は、このデータを変数
表 2 測定データ

アップル
レモン'月(月)月

5月

6月

7,'7,757,)57,(7,877,697,66
7,57

7,('7,'9に代入し 、0 関数を呼ぶことです。

: 7,' 7,75 ; 7,)5 7,( ; 7,87 7,69 ; 7,66 7,57 ; 7,(' 7,'9; ;
この  行を実行することで、図  に示すグラフが得られます。このように  行 変数に代入する必要は必ずしもないので  行でも可能 で簡単にグラフを描画することが可能ですが 、プレゼンテーションで使用するには、このままでは不十分です。そこで、この図を操作して、プレゼンテーションで使用するにふさわしいグラフに変形して行くことにしましょう。

 描画構造の基本
 におけるグラフの描画は、最初に元となるグラフをデフォルトの設定に任せて作成し 、その後で自分の思ったように変形して行くと意外と簡単に描くことができます。ここで

0.90.80.7

0.6

0.5

0.4

0.3

0.20.1

11.522.533.544.55

図 2 デフォルトの設定で描画したグラフ
は、 における描画構造について解説します。実践的な使い方のほうに興味があるという方は、この章は省略して ( 章へ飛んでいただいても構いません。
図中のオブジェクトには 、オブジェクトハンド ルと呼ばれる <= タグが付されます。この
オブジェクトハンド ルを指定することで 、各オブジェクトに対する操作を行うことができます。オブジェクトの現在の特性を表示するには 、そのオブジェクトのオブジェクトハンド ル を引数にして、  ;を実行します。また、そのオブジェクトのプロパティを変更するときには、オブジェクトハンド ルに続けて変更したいプロパティ名と実際にそのプロパティに与える値を引数とし 、  0 0 >  ;を実行します。

 では、図  に示すような構造でグラフの描画が行われます。座標軸はウインド ウ上に描かれるので、ウインド ウを親とする子オブジェクトとなります。また、その座標軸上に描かれる曲線は、その座標軸を親とする子オブジェクトとなります。オブジェクトによって、それが保有するプロパティも異なります。子オブジェクトのハンドルは、たいてい ?& 1 というプロパティに格納されます。ただし 、軸タイトルのような一部のものについては、独立のプロパティにハンド ルが格納されます。
基本となる幾つかのハンドルについては、予め変数名が割り当てられています。よく使用するのは %  と % @ のふたつです。それぞれ 、座標軸とウィンド ウのハンド ルに対応しています。試しに座標軸のみが描かれている図に対して、%  % @  を実行した結果の一部を示すと、次のようになります。
& : 77,77

ハンド ルである % @ は <= 番号ですので、これ自体も変数になっています。実際、% @ の値は になっていますので 、%  % @  も %    も同じ 結果を出力します。また、この例では、

ウィンドウのハンドル

gcf
親子
Figure No. 1

凡例のハンドル親Data
子線のハンドル子
マークのハンドル子
文字のハンドル子
座標軸のハンドルgca
親子

子
曲線のハンドル曲線のハンドル図 2  における描画構造?&1 プロパティの中の、77,77 が座標軸ハンドルに対応しています。したがって、% は実際には 77,77 という数字です。
ここで、ひとつ注意しなければならないのは、 での数字表現の精度です。 の内部での数字の取り扱いは 、全て倍精度浮動小数点型になります。したがって、それを表示した場合には、表示可能桁数によって丸めて表示されます。そのため、?&1 プロパティの値が 77,77 と表示されているからといって、%  77,77  が同じ結果を出力するとは限りません。ちなみに 、演算結果の表示桁数は、@ 3 %と入力することにより、増やすことができます。ただし 、残念ながらこの表示精度は、プロパティの表示には反映されません。<= 番号の値そのものが必要になることはまずありませんが 、必要ならば 、

 :   1&1 ;を実行して変数に代入してから 、その変数の値を表示することにより、確認することができます。
ソフトウェアは、どのような構造でその処理が行われているのかを理解すれば 、たいていの場合、自分の思い通りに扱えるようになります。

 プロパティの調整
 座標軸 は、描画しようとしているデータの全てが座標軸内に納まるように軸を形成します。
したがって、他とは大きく異なる値を持つ、いわゆる 外れ値 がデータに含まれていると 、データの傾向がグラフからは読み取り難くなります。また、折線の全体が座標軸の中に納まってはいるが 、なんとなくバラン スが悪いということもしばしばあります。このような場合には、座標軸の範囲を次の方法で変更します。

 %  131   131 

ここで、

 は  軸の左端の値、端の値、

 は > 軸の上端の値になります。

  ;

 は  軸の右端の値です。同様に、

 は > 軸の下

また、座標軸の目盛に振られる数字は、任意の文字列に変更可能です。ただし 、次の例にあるように、文字列の長さを同じにする必要があります。もし 、文字数が少ないものがある場合には、空白を追加して同じ 長さに調節しましょう。下記の例では 、 & と #0  が ) 文字で一番長いので 、他の文字も ) 文字になるように空白を追加します。

 %  1  -AB 1 1 &1 ; 1#0 1 ; 1 >1 ; 1C.  1 ; 1C.>1 ;曲線測定点に対するマークとして、' 種類のマークが準備されています。ただし 、実測によるデータについては測定誤差を含むので、面積のあるマークを使用するように、と学生時代に教わった記憶があります。デフォルトでは、中抜きのマークが使用されるので 、  1 - D  1

  ;のようにして、マークの中を塗り潰しておくのが良いでしょう。色については、表  に示したもの以外にも、7 7 7 の黒色から 、   の白色まで 、EF 表現を用いることにより自由に指定することが可能です。また、デフォルトのマークの大きさや線の太さは、プレゼンテーションで使用するにはやや小さく細いので、  1 - GH 1   ;  1A " &1   ;を利用して、太く大きくすると見易くなります。これらのプロパティの指定は、上記のように各項目を別々に指定することもできますし 、まとめて  回で指定することもできます。

  1 - D  1

  1 - GH 1   1A " &1   ;

また、以下の例のように、0 関数の中で指定することも可能です。

   1 - D  1

  1 - GH 1   1A " &1   ;表 2 利用可能な色・マーク・線種色

%

青緑
赤青緑

3>
マーク,




＋ 十字

実線
点線
鎖線
破線

□ 四角形
◇ 菱形

黒白

○ マル × バツ


2
,
I

＊ アスタリスク

赤紫
黄・ 点

線種

BJ

▽ 逆三角形0&☆ 五角星形

△ 三角形 左向き三角形  右向き三角形

六角星形

文字

ギリシャ文字や算術記号については、組版ソフトの $ で利用されているコマンド の幾つかが 、 でも利用できるようになっています。利用可能な A $ コマンドと実際に表記される文字を表 ' にまとめました。また、書体の変更についても、A $ と同様に以下のコマンド を利用して指定することが可能です。

I 
I 
I 3
この他にも、上付き文字 5 や下付き文字 6 を表示するときに 、A $ と同じコマンドが利用できます。

4@
443

 背景 で描画したグラフの背景は、デフォルトでは白地になります。しかし 、 などのプレゼンテーションソフトウェアでは多彩なテンプレートが準備されており、背景が白地でないものも少なくありません。この場合は、 で描画したグラフをそのまま取り込むと、そこの背景だけが白地になってしまいます。それを逆手に取って、うまくグラフを浮き立たせることもできますが 、なかなか容易ではありません。 でグラフを描画するときに背景色も変更するには、次のようにします。

 %  1 -F .  1 % @ 1 1   ;  ;← 座標軸の内側の背景色変更← 座標軸の外側の背景色変更

表 '2  で利用可能な A $ コマンド
ギリシャ文字 小文字

40&
4 0
4
4.
4 &
40&









4%33
4 
43 
4
4.
40



4B %3



M
Q
U

4 & 
4G%3
4V3 %

434 44X4B43 4 .0
4.0  4
43 4 4


:4<34 44 ..
4 @ 
4 @ %& #&(+/34 
4H 
4-00
4
 4%3
 4 &
ギリシャ文字 変体文字
4B &  4B0
ギリシャ文字 大文字
4F33
L4= 4P
4 
4 &T4 4 
4& 
43.
40
4.0
43 %

Æ


NRW

4A3 4!0

OS

4 %
43
4 
4 
40.
4. 
4
4 B
4% 4


:
400 40 0
4 4 
4&4.0 44%



4 0&4@>4 %4&  .
4.0 40 3$'),044040 4.
40 .
4 %& 
4V
*K
演算子

4 4.B40 0
4 X
4 %4. 4 04.  4403
4 %











!

その他の記号

4E
4@ 4
4 
4 3 .4  
4 0> %&

"%
Ê


.
25Æ




1
Y

DataData
図 '2 背景色の変更

座標軸の内側は %  のハンド ルを用い、座標軸の外側は % @ のハンド ルを用いていることに注意してください。また、このようにして描画したグラフを、 G ファイルや C $F ファイルへ出力する際に 、デフォルトでは背景を白に変更してし まう設定が  ではされています。そこで、画像ファイルへの出力後も、画面の背景色を保持するために、 % @ 1<B Z

0>1 1[1 ;を実行して、この機能を停止させておく必要があります。出力例を図 ' に示します。

凡例

どの線が何のデータであるかは、キャプションにも書けますが 、凡例で示したほうが分かり易くなります。 で凡例を書くためには、以下の関数を利用します。

 :      
この関数の戻り値は、凡例を描画するための箱のハンドルになります。凡例は、座標軸の外側に置かれることもありますので、このハンドルは座標軸のハンドルの子供ではなく、ウィンドウのハンドルの直接の子供になります。実際の凡例の線や文字は、その子供として作成されるので、これらを思い通りに変更するには、ここで作成した凡例ボックスの子供のハンド ルを、下記のようにして取得しなければなりません。

  :   1&

1

位置

文字を大きくすると、軸タイトルがウィンド ウからはみ出してしまうことがよくあります。
この場合、このまま画像ファイルに出力してしまうと、ウィンドウからはみ出している部分が切れてしまいます。この問題を解決するには、ウィンド ウ上の座標軸の位置をずらすのが有効です。

 :  %  1 1 ;
は、座標軸の位置情報に関する ( つの要素からなる配列を返します。したがって、先ず、
あるいは  の値を増減して調節し 、それでも納まらない場合には、' あるいは (の値を増減して調節すれば 、ウィンド ウの中に全てが入るようになります。

Figure No. 1(1,1)
pst(3)

： 軸の左端の位置：> 軸の下端位置

pst(4)

'： 軸の長さ
(：> 軸の長さ

pst(1)
pst(2)(0,0)

図 (2 ウィンド ウ内での座標軸の位置調整ファイルへの出力

描画したグラフをプレゼンテーションソフトウェアで使用するには、一度、 から画像 0
プリンタで出力することなどを考えると、$ 0 0 形式 , 0 で保存したいところです。ところが 、よく利用される  では  0 をプレビューできないた
め、適切な位置に配置できないばかりでなく、プレゼンテーションでは役に立ちません。この問題は、 <DD 形式を含んだ  0 ファイルを生成することにより解決できます。
で、 <DD 形式を含んだ $ 0 0 形式で出力する場合には、次のように入力します。
ファイルに出力した後に、そのファイルを読み込むことになります。ハンドアウトを0   0 [ \ 3 , 0
この場合は、\ 3 , 0 というファイル名のファイルへ出力されます。ファイル名を変数で与えたい場合には、次のようにします。

 10  0  [ 1  ;0  コマンド のオンラインマニュアルにも書かれていますが 、デフォルトの <DD 形式の解像度は 6 = < に固定されています。この解像度ですと 、プロジェクターに投影したときに、ギザギザ感が残ってしまいます。解像度は、
# A# V =<E]]3]% 0& ]0 B ]  ,3内で指定されています。ここで、# A# V =<E は、 がインストールされているトップディレクトリです。例えば、東北大学情報シナジーセンターの場合は、]. ]0]350)<DD 形式データを含ませることも可能です。研究室や個人で  を導入されているところは、試してみると良いかもしれません。このファイルを個人のディレクトリにコピーして編集し 、そのディレクトリが上記のデ ィレクトリよりも先に探索されるようにする方法もあります。になります。このファイル内の数字を書き換えることで、より高解像度のサンプルプログラム
これまでに説明した方法を用いて 、図  のグラフをプレゼンテーションに使用可能なグラフに変更するプログラムと、そのプログラムを実行した結果を次に示します。

* 基本図形の描画> : 7,' 7,75 ; 7,)5 7,( ; 7,8 7,69 ; 7,66 7,5 ; 7,(' 7,'9;> : > 77;&  : 0 > 11 1 - GH 1 7 1A " &1  ;
* 凡例の描画とフォントサイズの設定
% :  %   1#00 1 1A 31 ;  %  1DGH 1 5 ;* 折線の色変更
  &  1 1 1 1 1 - D  1 1 1 ;  &  1 1  7,9 7,' 1 - D  1  7,9 7,' ;* 座標軸の範囲、フォントサイズ、目盛の設定
  %  131 7 5 131 7 77 ;  %  1DGH 1 9 ;  %  1  -A 1 1 1 ; 1 &1 ; 1#0 1 ; 1 > 1 ; 1C.  1 ; 1C.> 1; 1 1 ;* 軸タイトルの描画  1&1 ;>  1V B
 43  75671 ;
* 座標軸と背景の色設定
  %  1  1 11 ;  %  1  1 11 ;  %  1 1 7 7 ))])) ;  % @ 1 1 7 7 )])) ;* 位置の調整0 : %  %  1 1 ;
0 : 0  7,7;
0 : 0  7,7;  %  1 1 0 ;* 色反転出力抑止とファイルへの出力  % @ 1<B Z 0>1 1[1 ;
0   0 [ \ 3 , 0

100−2Observed data (× 10 )80

604020Apple
Lemon

0MarchAprilMayMonthJuneJuly図 )2 本記事で紹介した方法で書き直したグラフ

おわりに今回紹介した方法は 、私が  でグラフを描画する際に通常使っているアプローチです。これまで  を利用する中で経験的に習得したものですので、きちんとマニュアルを読めば 、もっと簡単な方法があるかもしれません。 は、オンラインヘルプも充実しており、& 0 コマンド で参照できます。みなさん自身でも、ここで紹介されなかった様々な技法を見付け出し 、活用してください。本文を参考に、大切な研究成果を印象的なグラフに仕上げて、研究会や学会で発表していただければ うれしく思います。

参考文献
 樋口龍雄、川又政征、「 # A# 対応 デ ィジタル信号処理」、昭晃堂、777 年。
 上坂吉則、「 # A# プログラミング入門」、牧野書店、777 年。