Gnuplotの出力したグラフでアニメーションを作成するためには,いくつか方法がある. 例えば,出力形式をGIFに設定し,GIFアニメとして作成する方法. ただ,この方法では,画像がラスター化されるので, 表示の拡大に弱く,またファイルサイズが大きくなりがちである. 別の方法として,Flashアプリケーションを開発するというのも考えられる. Adobeが無償公開しているFlashアプリケーション開発環境Flexは SVG画像の埋め込みに対応していて,かつGnuplotはSVG形式での出力ができる. そこで,埋め込まれたSVG画像を高速切替表示するようなアプリケーションをつくろう, という方法である. この方法の場合,ベクター画像を用いるので,表示の拡大には強い. しかし,ファイルサイズが大きくなる, 動画プレーヤの一時停止コントロールが機能しない,といった問題が起こる.
これらの問題を解決するためには,Flashムービーとして作成すればよい. ところが,Flashムービー作成ツールのうち, Gnuplotの出力を正確に読み込めるようなものは, 今のところ,有償のものしかないようである. それらの有償ソフトウェアにはさまざまな機能が付加されていて, その機能を用いる人にとっては料金分の価値が確かにあるのかもしれない. しかし,今回の目的に限ればそのような機能は必要なく, 料金分の価値は認められない.
そこで,Gnuplotの出力を中間処理し, Flashムービー作成ツールが読み込みやすい形式に変換することを考えた. 考案した方法により,Flashムービーを生成することに成功した.
以下で紹介する方法を実行するためには,GnuplotからPDFで出力を得る必要がある. Gnuplotはバージョン4.0からPDFでの出力に対応しているが, その機能を利用するためには, libpdfを取り込んでGnuplotをコンパイルしなければならない. Windows環境なら,角藤氏のバイナリを使うのが容易だろう.
PDF出力に対応していないGnuplotでもできる方法については, 最終節「そのほかの方法」を参照せよ.
データセットとして
./dat/sierpinski_0.dat ./dat/sierpinski_1.dat ./dat/sierpinski_2.dat ./dat/sierpinski_3.dat ./dat/sierpinski_4.dat ./dat/sierpinski_5.dat ./dat/sierpinski_6.dat ./dat/sierpinski_7.dat(sierpinski.zip)が得られているとしよう. まずは,これらをGnuplotに入力し,PDF形式でプロットする. 次のスクリプトをGnuplotに渡せばよい:
#!/gnuplot
set terminal pdf enhanced size 6cm,5cm
set output "./pdf/sierpinski_???.pdf"
set lmargin 0.6
set bmargin 0.5
set rmargin 0.6
set tmargin 0.5
unset border
unset tics
set xrange [-0.9:0.9]
set yrange [-0.5:1.0]
plot "./dat/sierpinski_???.dat" notitle with lines
ただし,???
は0
から7
までの数字.
そうすると, PDF形式の画像
./pdf/sierpinski_0.pdf ./pdf/sierpinski_1.pdf ./pdf/sierpinski_2.pdf ./pdf/sierpinski_3.pdf ./pdf/sierpinski_4.pdf ./pdf/sierpinski_5.pdf ./pdf/sierpinski_6.pdf ./pdf/sierpinski_7.pdfが得られる. 次の目標は,これらの画像をSWF形式に変換すること. そのために,次のコマンドを実行する:
pdf2swf ./pdf/sierpinski_???.pdf -o ./swf/sierpinski_???.swf
再び,???
は0
から7
までの数字.
あとは,いま得られたSWFファイル
./swf/sierpinski_0.swf ./swf/sierpinski_1.swf ./swf/sierpinski_2.swf ./swf/sierpinski_3.swf ./swf/sierpinski_4.swf ./swf/sierpinski_5.swf ./swf/sierpinski_6.swf ./swf/sierpinski_7.swfを,SWFCombineで一つにまとめればよい. 次のコマンドを実行する:
swfcombine -z -r 2 -o sierpinski.swf --stack^
./swf/sierpinski_0.swf ./swf/sierpinski_1.swf ./swf/sierpinski_2.swf^
./swf/sierpinski_3.swf ./swf/sierpinski_4.swf ./swf/sierpinski_5.swf^
./swf/sierpinski_6.swf ./swf/sierpinski_7.swf
ここでの出力sierpinski.swfが求めるものである.
SWF形式への変換には,OpenOffice.org Drawを用いることもできる. すなわち,GnuplotからEMF形式などで出力を得て, それをOpenOffice.org DrawでSWF形式に変換,さらにSWFCombineで連結すれば, Flashムービーが生成できる.
ただ,上記の方法と異なり,この方法は自動化が難しいようである.