Gnuplot on C#


昔書いたエントリC#からGnuplotを制御するプログラムを紹介した。そのときに使うGnuplotは改造されたものであることを述べた。実はGnu OctaveGnuplotが付属しており、そのGnuplotでも良いことがわかった。(前から知っていたがなんとなく試してはいなかった)
そのついでにGnuplotSharpも少し修正した。

このプロジェクトでは拡散方程式を解いて時間ごとに分布を表示している。このときにGnuplot側の処理速度と同期するようにしているのが特徴。(普通のGnuplotを使うと実現できない。)これはReadError関数が担っている。もうすこし詳しく説明すると、WriteLineでコマンドを打ち、そのあとGnuplot標準エラー出力にメッセージを返す。そのメッセージがすべて送られてくるまでReadError関数は待つということをしている。それにより同期している。
プロジェクトのソースを見てみれば分かるが、点のデータを直接入力するときは、最後まで入力しないとGnuplot標準エラー出力を返さない。なので最後まで入力してからReadErrorを実行すること。
ちなみに、ThrowErrorExceptionプロパティーがtrueにするとGnuplotがエラーを起こした時に例外を発生するようしてある。



追記 8/29 上の方法ではGnuplotがウィンドウを開き描画していた。ただそれだとC#からの管理ができないのが難点。そこで

  • set terminal emf

とすると標準出力にEnhanced Metafileを出力してくれる。これをImageクラスに読み込ませればC#で管理することができる!ただ視点方向を制御するのも自分で書かなくてはいけなくなるが…
と思ったが、連続的に標準出力に書き込まれるとどこか区切れなのか分からない…これは困った