3次元のグラデーション付き等高線図を何で描くか?
Plotmtv,xplot,gnuplot,vis5d

右の図のようなグラフを描きたくなることがあります。 これは、DNA のまわりの静電ポテンシャルと、 その回りでブラウン運動している対イオンの分布を あらわしたものです。 簡単にいえば、
3次元のグラデーション付き等高線図を何で描くか?
というのが今回のお題です。

gnuplot は、2次元のグラフを描くには申し分のないソフトです。 でも、今回のように、ポテンシャル面にグラデーションをつけたい場合に どうすればいいのかよくわからんかった。

そこで、xplot を考えました。 富士山の立体図 がなかなか強烈な 伊藤先生のページ をもとに使ってみたのですが、なんと座標軸を書き込めない。 因みに、上のページで述べている xplot のソースは Linux NOW から 辿れます(上のページではCD-ROMが紹介されていたので)。それから、 xplot のソースを探しているときに、FreeBSD のパッケージで同名のものを 見つけましたが、そちらは2次元プロットを作成するソフトです。

で、とにかく、次に考えたのが vis5d という 5次元のグリッドデータを描くソフトです。これは Web ページで見ても 強烈で、楽しそうなんだけど、で、うちでも Mesa-lib を入れて コンパイルしたら出来て感動したのだけれど、どうも気象に特化している ようで、すごすぎてわけわかんない。

ということで、 PlotMTV というのがいけてることが判明しました。 Plotmtv.1.4.0.tar.Z をとってきて make 一発。いろいろ warning が出ますが、気にせずインストールしてしまいました(笑)。

このソフトの特徴は、
・グリッドデータの表示が得意
・データを最後までアスキーファイルで扱える
・操作が多機能の割にシンプル
・細かい設定は 環境変数+起動時の引数+データファイル でする
といったところでしょうか。


スクリーンショット
このグラフを作った元データ もフォーマットの参考に置いておきます。

ソースツリーの下の Docs 以下に
plotmtv.man
DataFormat.ps
があります。最初のものが man ファイルで、次のものがデータファイルの フォーマットの解説です。後者はデカいので、プリントアウトに苦労しました が、とにかくこの2つを丁寧に読めば、かなり使えることがわかるでしょう。 話がそれますが、gnu man を使っている場合は上のファイルは

% man -t ./plotmtv.man > plotmtv.ps

てな感じでポストスクリプトに整形して出力することができます。
スクリーンショットの上にある様々なボタンをクリックすることによって、 表示を変える(2D - 3D 切替えなど)できます。気に入った表示になった ところで、「Print to File」すれば、そのディレクトリに dataplot.ps というファイルが出来るので、それをリネームしてもいいし、 最初からファイル名を指定することもできます。

上のスクリーンショットは、曲面1つ、平面1つ、直線2本から成っていますが、 これは、plotmtv を起動するときに -plotall をつけると描いてくれます。 他には、-multi で一つのウインドウに複数のグラフを描いてくれたりも します。

出力したグラフを論文などに張り付ける場合、TeX の figure 環境などを使うわけですが、plotmtvのグラフは 600x800 ピクセルの ポストスクリプトに固定されている?ため、 余分な空白が気になる場合があります。それには、出力した *.ps ファイルの
%%BoundingBox: 0 0 600 800
という部分を、たとえば
%%BoundingBox: 0 120 600 700
といったように書き換えることによって、BoundingBox の大きさを調節 すれば望みの範囲を論文に張り付けることが出来ます。

唯一の難点は、グラフの軸ラベルに使うフォントが固定であることです。 つまり、上のグラフの z 軸のラベルを e Φ/ kT と描きたいのですが、 Φに出来ない。。

追記:

もっとも, 最近は gnuplot の方を良く使っています. いろんな機能を組み合わせれば, こんな図も描けます.