地質屋必須?! 三角ダイアグラム作成プログラム
えーと...これはけっこう最近書いたものかと思っていたんですが,あらためて読んでみると,けっこう懐かしいので.f(^^;
しかし,ここに書いた三角ダイアグラムをめぐるソフトウェア状況は,ほとんど当時と変わっていません.このプログラム,私と私の研究室では,いまだに便利に使っています.ぜんぜん(ほとんど?)改良されていませんが,一応 VB6 で 32bit化していますので,最新の WINDOWS XP でもちゃんと動きます.しかし不特定多数の方への配布は行っていません.
最後に書いてある『ただし,あまり売れるようだと,開発コストを回収するために』は,まったくのシャレで書いたんだと思うけど,あんまり笑えんな.f(^^; (2003/05/15)(2004/10/04加筆)
1.はじめに
『三角ダイアグラム(Ternary Diagram)』は,地球科学分野の研究者がしばしば使用する,3成分データの相対量比を視覚的に表現するグラフ形式である.しかし,三角グラフ用紙等を用いたハンドプロットは繁雑であり,その手法上,データ数が多くなると単純ミスが避けられない.誰でもが経験あるのは,三角ダイアグラムの底辺の2成分を逆にプロットしてしまうというものであろう.
2成分散布図やヒストグラムなどは,EXCELのような市販の表計算ソフトやグラフソフトを用いてパーソナルコンピュータ(PC)上で簡単にしかも正確に(かつmodifiableに)描けるようになっている.しかし,三角ダイアグラム形式のグラフをサポートしている市販ソフトは非常に少ない.筆者の把握している限りでは,DeltaGraphとSystatがある.いずれも WINDOWS版とMac版の両方がある.
前者は,価格もそれ程ではなくポピュラーなグラフソフトであるが,筆者が購入して試してみた限りでは,3成分の扱いなどに,我々の使用法とは違和感があった(端成分ではなく軸ラベルとなる等).後者はもともと高機能な統計解析パッケージであり,非常に高価なものである.そのわりには三角図機能は極めて貧弱なもので,とても使い物にはならないと感じた.また,日本語版はリリースされていない.
その他に,海外のシェアウェアとして,TriPlotというものがある.筆者が試用したのはWINDOWS版 Ver.2.1のみであるが,Mac版もある(らしい).WINDOWS版はCICA CD-ROM などに収録されているので,そのへんで簡単にgetできる.添付の readmeを読む限りでは,Ver.3からは市販ソフトになるようである.添付のサンプルを見るとすぐに分かるが,驚いたことに,このソフトは地質屋(and/or土木屋)をターゲット(の一つ)としたものである.あるいは開発者自身がそういう立場なのかもしれない.筆者と同じように.このTriPlotは非常に高機能なもので,シンボルのサイズ可変やメタファイルへの出力,オーバレイ表示などもサポートされている.しかし,データのグルーピングが不可能で,日本国内と感覚が異なるのかもしれないが,かなり疑問が残った.
筆者は,これらのソフトが入手・使用できる環境がそもそも無かった暗黒の時代(=『N88BASIC - 98DOS時代』)に生きてきたので,三角ダイアグラムを作成するPC上のプログラムをN88BASIC言語を用いて作成し使用してきた.その後時代はめぐり,閉じたDOSから開かれたWINDOWSにPC環境が完全に移行したのに対応し,筆者もWINDOWS上の市販ソフト等で三角図を作成する道を探求してきたが,上記のような状況で結局,大昔の自作プログラムをWINDOWS環境に移植せざるをえなくなった.
その結果,DOS-BASICでは640*400ドットに事実上(理不尽に?)制限されていた描画領域をはるかに越える精度でのプロットが可能になった.ものはついでなので,さらにWINDOWS環境の特色を利用して,このプログラムからドロー系グラフィックソフトへのベクトルデータ出力を可能にした.以下に,簡単に紹介したい.
2.三角ダイアグラムのプロット原理
三角ダイアグラムのプロット原理は,(おそらく)下図のようなものである.
すなわち,各端成分の比が,プロット点から底辺に降ろした各垂線の長さの比に等しい.そのため,あるデータプロット点の底辺からの高さと三角形の高さの比は,そのデータの三成分全体に対する比に等しくなる(A/(A+B+C)=a/h).また伝統的なハンドプロットにおいては一般に,この原理を用いることは不可能なので,二つの成分について底辺からその距離だけ離れた平行線を引き,その交点をプロット点とする方法を用いている(下図).
しかし,これらの原理・手法をコンピュータ上のプログラミングによる座標プロットにそのまま用いるのはいずれも困難・煩雑である.そこで,以下のような簡便なアルゴリスムを用いた.つまり,底辺から成分Aの比だけ離れた平行線の位置が描画領域(ディスプレイ)上のY座標,その線上でB:C=c':b'となる場所がX座標である(最初の図).
3.プログラム仕様
本プログラム(WinTernary:上図)はWINDOWS上の開発言語統合環境であるVisualBasicVer.2Jで開発された(下図).
VisualBasicは,エンドユーザレベルでのWINDOWSアプリケーションの作成を可能にするMicroSoft社製の開発言語であり,WINDOWSシステムレベルでのプログラム記述をまったく必要としないという特徴がある.またその言語仕様は,従来国内でも広く使用されてきた簡易プログラム言語である BASIC言語と多くの共通性・互換性を持っているので,移植がきわめて容易である.WinTernaryの現バージョンでの機能および仕様は以下の通りである.
・表形式のデータ入力と修正機能: データの最大量は50データ*10グループ=500個/ファイル.
・自由に設定できるデータグループごとのプロットシンボル: 12種類(白丸・黒丸・二重丸・白四角・黒四角・白三角・黒三角・白逆三角・黒逆三角・十字・×印・点).
・三角ダイアグラムの印刷とクリップボードへの転送: ただし,ビットマップ形式のみ.
・三角ダイアグラムの4分割部分拡大表示.
・グループごとに各データプロットに連番を表示する機能.
現在,WinTernaryにインプリメントを考えている機能は以下のようなものであるが...後2者は,開発者の力量不足により,実現可能かどうかは不明である.
・グループごとの平均値プロット.
・シンボルの可変サイズ.
・頻度コンター.
・任意部分の拡大表示.
4.市販ドローソフトへのデータ出力
三角ダイアグラムをOHP・スライド等のプレゼンテーションに使用したり,投稿論文原稿の図として使用するには,WinTernaryからの出力では,その体裁・品質は十分なものではない.ダイアグラムにキャプション・矢印・領域・背景などを自由に追加(・変更)して描画する機能が必須となる.また,拡大しても品質の高い印刷をするためには,ビットマップとしてではなく,拡大(縮小)可能なベクトル形式のデータとしてダイアグラムを描画出力する必要がある.これらを本プログラム上ですべて実現するには,WINDOWSプログラミングの高度な技術が必要であり,とうてい筆者のようなエンドユーザプログラマの領域ではない.
そこで,データ交換性に優れたWINDOWS環境を最大限に活用し,プリンタドライバを利用してグラフィックスをベクトルデータとしてドローソフトへエクスポートし,各種自由描画はドローソフトの高度な機能を利用する,という“できそうもないことはできるやつにまかせる”賢明な方針を取り,以下のような方法を考えた.
1)WINDOWS標準添付のPostScriptドライバをインストールし,出力先をファイル形式に設定しておく.
2)WinTernaryプログラムからPrinterオブジェクトに対して三角ダイアグラムの描画を行うと,それがベクトルデータ(PostScriptコマンド)としてPostScriptファイルに出力される.
3)PostScriptファイルを,そのインポートをサポートしたドローソフト(例えばCorelDraw 5.0J)にインポートする.
4)ドローソフト上で,ドロー形式のグラフィックデータとして編集可能となるので,あとはグラデーションでもなんでもお好きなように(下図).
5.最後に
WinTernaryは登録料 ¥1(1円!) のシェアウェアである.ただし,あまり売れるようだと,開発コストを回収するために,そのうち大幅な値上げも考えられる.入手を希望される方は問い合わせていただきたい.必要システム環境は以下の通りである.
*****
WINDOWS 3.1(以上)が動作しているPC(推奨i486DX/33以上)で,実装メモリ8 MB以上(推奨16 MB),ディスプレイの最大表示ドット数が1024*768 dots以上,のもの.
*****
蛇足であるが,ベクトルデータでの出力は,PostScript形式をサポートしたドローソフトが,もちろん別途必要である.