研究プロジェクト

シミュレーション結果の可視化法 (gnuplot編)

シミュレーション研究では、膨大な計算データがアウトプットされ、それらを如何にして効果的に見せるかを考える事は、シミュレーション研究者にとっての一つの大きな課題です。本記事では、その1例としてgnuplotを用いた2次元カラーコードの制作方法を解説します。

gnuplot はもっともポピュラーなグラフ描画ツールの1つです。Linux 版と Windows 版の両方があること、 たいていの Linux 環境ではデフォルトでインストールされていること、3次元プロットやカラープロットが 容易にできることなどから、気軽に利用可能で機能的なツールです。 作成するグラフに凝りたいときは、自分で工夫をしたり、 他の描画ツールと組み合わせて使う事も出来ます。 初期設定や、非常に複雑なプログラミングについては本ページでは触れませんが、様々な資料やティップスがウェブ上で公開され、書籍で出版されていますので、それらを参考にしてみて下さい。
gnuplotのホームページへリンク

E-t ダイアグラム風カラーコンターの設定

gnuplot> set palette defined (0 "black", 20 "blue", 45 "skyblue", 60 "green", 75 "yellow", 95 "orange", 100 "red")

E-t 風カラーコンター

黒背景スライド用に背景透過 GIF で保存する方法

プレゼンテーション用のスライドの背景に色付きのものを使うとき、グラフの背景が白色のままだと グラフの周りが白くなってかっこ悪いです。そこで、グラフの背景を透過させる方法を紹介します。 ここでは、黒背景スライドに載せることを想定し、グラフの軸や目盛を白にします。

まず、グラフを eps 形式で保存します。

gnuplot> set terminal postscript enhanced color
gnuplot> set output "sample.eps"
gnuplot> plot "sample.dat"

次に、eps ファイルの中身を編集し、グラフの軸と目盛の色を変更します。 eps ファイルの 51〜52行目に書かれている

/LTb { BL [] 0 0 0 DL } def
/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
の 0 0 0 を 0.99 0.99 0.99 (RGB で 0〜1 を指定) に変更します。

最後に、ImageMagick を使って透過 GIF に変換します。

$ convert -transparent white sample.eps sample.gif

さきほど、グラフの軸と目盛の色を 1 1 1 に指定しなかったのは、背景色を透過化するときに 一緒に透過化してしまわないようにするためです。

グラフ作成作業のバッチ化

gnuplot では、あらかじめ作成したバッチファイルを読み込むことが出来ます。例えば、

set pm3d map
set logscale x
splot "sample.dat"
のような sample.plt というファイルを用意して
$ gnuplot sample.plt
あるいは
gnuplot> load "sample.plt"
とすると、バッチファイルの中のコマンドを実行できます。

しかし、このバッチファイルではループ等の処理は行えず、 大量に図を出力するときには面倒です。そこで、バッチファイルを作成し 実行させるシェルスクリプトを作成します。 ここでは例として、sample01.dat 〜 sample10.dat をカラープロットし、 eps として保存し、グラフの軸と目盛を白にした背景透過 GIF に変換するスクリプトを 示します。

#!/bin/bash

while [ $n -le 10 ];
do
if [ $n -lt 10]; then
dat = sample0$n .dat
eps = sample0$n .eps
gif = sample0$n .gif
else
dat = sample$n .dat
eps = sample$n .eps
gif = sample$n .gif
fi

echo "set pm3d map" > sample.plt
echo "set palette defined (0 \"black\", 20 \"blue\", 45 \"skyblue\", 60 \"green\", 75 \"yellow\", 95 \"orange\", 100 \"red\")" >> sample.plt
echo "set terminal postscript enhanced color" >> sample.plt
echo "set output \"$eps \"" >> sample.plt
echo "splot \"$dat \"" >> sample.plt

gnuplot sample.plt
black = 0\\\ 0\\\ 0
white = 0.99\\\ 0.99\\\ 0.99
sed -e "51,52s/$black/$white/g" $eps > $eps
convert -transparent white $eps $gif

n=`expr $n + 1`
done

<湯村翼 / 編集: 田中健太郎>