splot は3 次元描画のためのコマンドです (もちろんご存知でしょうが、実際にはその2 次元への射影)。そ
れは関数、またはファイルから読み込んだデータから plotコマンドととても良く似た方法でその描画を作り ます。splotは、それぞれ単一のx, y, z軸を提供するだけで、plotで用意されている第2軸x2, y2のような ものはありません。
2次元と 3次元描画の両方で使える多くのオプションについては、以下参照:plot (p. 74)。
書式:
splot {<ranges>}
{<iteration>}
<function> | "<datafile>" {datafile-modifiers}}
{<title-spec>} {with <style>}
{, {definitions{,}} <function> ...}
ここで、関数<function>、またはクォートでくくられたデータファイル名のどちらかが必要です。関数は、一 本の数式、あるいは媒介変数モードでは3 つの数式の組です。
デフォルトでは、splotは描画されるデータの下に完全なxy面を描きます。zの一番下の目盛りとxy平面の 位置関係はset xyplaneで変更できます。splotの射影の向きはset viewで制御できます。詳細は、以下参 照:set view (p.159),set xyplane (p. 166)。
splot コマンドの範囲の指定の書式は plot の場合と同じです。媒介変数モードでなければ範囲は xrange,
yrange,zrangeの順であり、媒介変数モードではurange,vrange,xrange,yrange,zrangeの順です。
titleオプションもplotと同じです。with もplotとほぼ同じですが、splot では利用可能な描画スタイル はlines,points,linespoints,dots,impulses に限られています。plotで使えるエラーバーの機能はsplot にはありません。
datafileオプションにはさらに違いがあります。
以下も参照: show plot (p.136)。
データファイル (datafile)
plotと同じように、splot でファイルからグラフを生成できます。
書式:
splot ’<file_name>’ {binary <binary list>}
{{nonuniform} matrix}
{index <index list>}
{every <every list>}
{using <using list>}
""や"-"といった特別なファイル名もplotと同様に許されます。以下参照: special-filenames (p. 84)。
手短にいうと、binaryやmatrixはそのデータが特別な形であることを、indexは多重データ集合ファイル からどのデータ集合を選んで描画するかを、every は各データ集合からどのデータ行 (部分集合)を選んで描 画するかを、using は各データ行からどのように列を選ぶかを指定します。
indexとeveryオプションはplotの場合と同じように振舞います。usingも、usingのリストが2 つでな く3 つ必要であるということを除いては同様です。
thruやsmoothといったplotのオプションはsplotでは利用できません。しかし、cntrparamやdgrid3d が、制限されてはいますが平滑化のために用意されています。
データファイルの形式は、各点が(x,y,z)の3つ組である以外は、本質的にplotと同じです。もし一つの値だ けが与えられれば、それはzとして使われ、データブロック番号がyとして、そしてxはそのデータブロック 内での番号が使われます。もし 2つ、あるいは4 つの値が与えられれば、gnuplotはその最後の値をpm3d plotでの色の計算に使います。3 つの値は(x,y,z) の組と見なされます。他に値があれば、それは一般に誤差 と見なされます。それはfit で使うことが可能です。
splotのデータファイルでは、1 行の空行はデータブロックの分離子です。splotは個々のデータブロックを、
関数のy-孤立線と同じものとして扱います。1行の空行で分離されている点同士は線分で結ばれることはあり
ません。全てのデータブロックが全く同じ点の数を持つ場合、gnuplotはデータブロックを横断し、対応する 点同士を結ぶ孤立線を描きます。これは"grid data" と呼ばれ、曲面の描画、等高線の描画(set contour)、
隠線処理(set hidden3d)では、この形のデータであることが必要となります。以下も参照: splot grid data
(p. 174)。
3列のsplot データにおいては、媒介変数モード(parametric)を指定することはもはや不要です。
Matrix
gnuplotは、matrix (配列)形式のデータを、2つの異なる形式で解釈することができます。その1つは、x, y
の座標が一様であると仮定して、その値をこの一様な格子のmatrixのそれぞれの要素に割り当てる方法です。
これは、ASCIIデータに対してはデフォルトですが、バイナリデータに対してはそうではありません。一様な
matrixデータを描画するコマンドの例:
splot ’file’ matrix using 1:2:3 # ASCII データ splot ’file’ binary general using 1:2:3 # バイナリデータ
一様な格子のmatrixデータでは、各ブロックのzの値は一行で一度に読まれます。すなわち、
z11 z12 z13 z14 ...
z21 z22 z23 z24 ...
z31 z32 z33 z34 ...
等。
ASCII入力では、空行やコメント行は配列データを終了させ、新たな曲面の網(mesh)を開始します。いつも
のことですが、splot コマンド のindex オプションを使ってファイル内の網を自由に選択できます。2 つ目 の形式は、非一様な格子で、x, y座標は明示していると仮定するもので、入力データの最初の行をy座標、最 初の列をx座標とみなします。バイナリデータに対しては、1行目の最初の要素は、データ列数でなければい
けません(ASCIIデータではその数は無視されます)。座標とデータ値は、バイナリデータでは単精度浮動小数
値とみなされます。非一様なmatrixデータを描画するコマンドの例:
splot ’file’ nonuniform matrix using 1:2:3 # ASCII データ splot ’file’ binary matrix using 1:2:3 # バイナリデータ よって、非一様なmatrixデータの構造は以下のようになります:
<N+1> <y0> <y1> <y2> ... <yN>
<x0> <z0,0> <z0,1> <z0,2> ... <z0,N>
<x1> <z1,0> <z1,1> <z1,2> ... <z1,N>
: : : : ... :
これらは以下のような3つの数字の組に変換されます:
<x0> <y0> <z0,0>
<x0> <y1> <z0,1>
<x0> <y2> <z0,2>
: : :
<x0> <yN> <z0,N>
<x1> <y0> <z1,0>
<x1> <y1> <z1,1>
: : :
そして、これらの3つの数字の組はgnuplotの孤立線に変換され、その後gnuplotが通常の方法で描画の残 りを行います。
行列やベクトルの操作のサブルーチン (Cによる) がbinary.c に用意されています。バイナリデータを書く ルーチンは
int fwrite_matrix(file,m,nrl,nrl,ncl,nch,row_title,column_title)
で す。こ れ ら の サ ブ ル ー チ ン を 使 う 例 が bf test.c と し て 用 意 さ れ て い て 、こ れ は デ モ ファイ ル demo/binary.dem用に複数のバイナリファイルを生成します。
plotでの使用法:
plot ‘a.dat‘ matrix
plot ‘a.dat‘ matrix using 1:3
plot ’a.gpbin’ {matrix} binary using 1:3
これらは配列の行を描画し、using 2:3とすれば配列の列を描画、using 1:2は、点の座標を描画します(多分 無意味です)。オプションeveryを適用することで明示的に行や列を指定できます。
例– ASCIIデータファイルの配列の軸の拡大:
splot ‘a.dat‘ matrix using (1+$1):(1+$2*10):3
例– ASCIIデータファイルの配列の第3行の描画:
plot ’a.dat’ matrix using 1:3 every 1:999:1:2 (行は0から数えられるので、3ではなくて2 を指定します)。
Gnuplotは、array,record, format,filetype などのgeneralバイナリ形式を特定するようなキーワードを つけずにオプションbinaryを使うことで、matrixバイナリファイルを読み込むことができます。その他の変
換用のgeneralバイナリキーワードは、matrixバイナリファイルにも適用できるでしょう。(詳細は、以下参
照: binary general (p. 75)。)
データファイルの例
以下は3次元データファイルの描画の単純な一つの例です。
splot ’datafile.dat’
ここで、"datafile.dat"は以下を含むとします:
# The valley of the Gnu.
0 0 10 0 1 10 0 2 10 1 0 10 1 1 5 1 2 10 2 0 10 2 1 1 2 2 10 3 0 10 3 1 0 3 2 10
この"datafile.dat"は4*3 の格子(それぞれ 3点からなるブロックの4つの行)を定義することに注意して下
さい。行(データブロック)は1 行の空行で区切られます。
xの値はそれぞれのデータブロックの中で定数になっていることに注意して下さい。もしy を定数の値とし、
隠線処理が有効な状態で描画すると、その曲面は裏返しで書かれることになります。
格子状データ(grid data)に対して、個々のデータブロック内でxの値を定数としておく必要はありませんし、
同じ場所の yの値を同じ値に揃えておく必要もありません。gnuplot は個々のデータブロック内の点の数が 等しいということを必要としているだけです。しかし、等高線を導くのに用いられる曲面の網目は、対応する 点を列的に選んで結ぶため、不揃いの格子データに対する曲面の描画への影響は予想できません。それはケー スバイケースの原理でテストすべきでしょう。
格子状データ (grid data)
3次元描画のためのルーチンは、個々の網目の格子においては一つの標本点と一つのデータ点がある、という形 の格子状データ用に設計されています。各データ点は、関数の値を評価すること(以下参照: set isosamples (p. 120))、またはデータファイルを読み込むこと(以下参照: splot datafile (p.171))によって生成されま す。"孤立線"という言葉は関数に対しても、データに対してもその網目の線を表すものとして用いられます。
網目は、必ずしもx, yに関する長方形でなくてもよく、u,vで媒介変数表示されても構わないことに注意して 下さい。以下参照: set isosamples (p. 120)。
しかし、gnuplotはそのような形式を必ずしも必要とはしません。例えば関数の場合は、samplesはisosamples と違っていても構いません。すなわち、x-孤立線のうち、1本のy-孤立線と交わないものがいくつかあること があります。データファイルの場合は、個々のデータブロックのばらついた点の個数が全て同じであれば、"孤 立線は" はデータブロックの点を結び、"横断孤立線"は各データブロックの対応する点同士を結び、"曲面"
を作ろうとします。どちらの場合でも、等高線、および隠線処理モードは点が意図したフォーマットであった 場合とは違った描画を与えることになります。ばらつきのあるデータはset dgrid3d によって{異なる}格 子状データに変換することができます。
等高線に関するコードは、y-孤立線の点と、それに対応する隣のy-孤立線上の点の間の線分に沿ってのzの張 力を計測します。よって、x-孤立線に、y-孤立線との交点とはならないような標本点があるような曲面に対し ては、splotの等高線はそのような標本点を無視することになります。以下を試してみて下さい:
set xrange [-pi/2:pi/2]; set yrange [-pi/2:pi/2]
set style function lp set contour
set isosamples 10,10; set samples 10,10;
splot cos(x)*cos(y) set samples 4,10; replot set samples 10,4; replot