- not so Frequently Asked Questions - update 2004/9/5
|
|
not so FAQ |
データファイルの数値のプロット (その1)何かの計算や実験を行い,その結果をグラフにするのが, 理系の研究者にとって最も多いgnuplotの使われ方ではないでしょうか. 結果のデータをプロットして全体を眺め,結果が良さそうだったらポストスクリプト にして印刷したり,EPSにしてTeXで書かれた論文に貼り込んだり.... プロットできるデータのフォーマットは?2次元のデータわざわざ書くまでも無い話しですが,一応ここにまとめておくこと にします.数値データは,空白(スペースもしくはタブ)で区切られた カラムにします.行の先頭に#があると,その行は無視されます. 実はgnuplotは,データがどのように書かれていても,読み込みの書式 を指定することでデータを読めるのですが,ここではこの方法は 取り上げません. # X Y 1.0 1.2 2.0 1.8 3.0 1.6 例えば2次元データの場合は,上の様にX座標とY座標を並べて書きます.X やYに誤差棒を付けたければ,さらにそれらのカラムを並べて書きます.プロッ トする時にどの数値を使うかを指定するので,カラムの順序はどうなっていて もかまいません.1カラム目をX座標,2カラム目をY座標にしたときは gnuplot> plot "test.dat" using 1:2 のように,usingを使ってgnuplotに描くカラムを教えます.usingを使わない と,自動的に1カラム目をX,2カラム目をYにしてプロットします. Y座標に誤差棒を付ける方法は2つあります.1つは Y±Z のようにYを 中心に上下にZの棒を付ける場合.もう一つは Yの範囲[Z1,Z2]が決まっている 場合のように上下の棒の長さが異なる場合です.前者のデータファイル には3カラムの数値,後者なら4カラム必要です. # X Y Z 1.0 1.2 0.2 2.0 1.8 0.3 3.0 1.6 0.2 # X Y Z1 Z2 1.0 1.2 0.8 1.5 2.0 1.8 0.3 2.3 3.0 1.6 1.0 2.1 それぞれをプロットするときは, gnuplot> plot "test.dat" using 1:2:3 with yerrorbars gnuplot> plot "test.dat" using 1:2:3:4 with yerrorbars の様に using の後の指定が変わるだけです. 表示するデータの形式によって,データカラム数やusingの指定が変わります. 2次元データの場合のこれらを以下にまとめます.
3次元のデータ3次元データは(X,Y,Z)の組にして与えます.デフォルトでは,3次元空間に 点を表示します.with linesのオプションで線を描くようにした場合, データの与え方によって,3次元空間に線だけを描くか,面(つまり縦横の格子) を描くかが変わります.例として,次のように4つのブロックに分かれたデー タを考えます.ブロック間は1行の空行で分けられており,各ブロックのX,Yの 数は異なっています.この場合,gnuplotは格子を描かずに線だけを表示しま す. # X Y Z 0 0 0 0 1 1 0 2 4 0 3 9 0 4 16 0 5 25 1 0 1 1 1 2 1 2 5 1 3 10 1 4 17 2 0 4 2 1 5 2 2 8 2 3 13 3 0 9 3 1 10 3 2 13 gnuplot> splot "test3d.dat" using 1:2:3 with lines 次に,XYの数をそろえてみます. # X Y Z 0 0 0 0 1 1 0 2 4 0 3 9 0 4 16 0 5 25 1 0 1 1 1 2 1 2 5 1 3 10 1 4 17 1 5 26 2 0 4 2 1 5 2 2 8 2 3 13 2 4 20 2 5 29 3 0 9 3 1 10 3 2 13 3 3 18 3 4 25 3 5 34 この様に,縦横の格子が入ります.上の例では,各ブロックでのY座標が同 じ場合でしたが,ブロックのY座標が異なっても,各ブロック内の点の数が同 じなら格子が描かれます.これらのデータはグリッドデータとして扱われます. gnuplotが等高線を描いたり,隠線処理をするのは,このグリッドデータに対 してです.試しに上のデータの最後のブロックのY座標だけを2倍すると,次 のようになります. 各ブロックの点数が同じでも格子を描きたくない場合は,各ブロックの間に 2行の空行を入れます. # X Y Z 0 0 0 0 1 1 0 2 4 0 3 9 0 4 16 0 5 25 1 0 1 1 1 2 1 2 5 1 3 10 1 4 17 1 5 26 2 0 4 2 1 5 2 2 8 2 3 13 2 4 20 2 5 29 3 0 9 3 1 10 3 2 13 3 3 18 3 4 25 3 5 34 matrix別の3次元データの与え方として,行列(matrix)で与える方法があります. 上の例の様に,XYの格子が固定さている場合には,こちらの方がデータが簡潔 になります.行列の行(横)はX,列(縦)がY軸になります. 0 1 4 9 1 2 5 10 4 5 8 13 9 10 13 18 16 17 20 25 25 26 29 34 このデータをプロットするときは, using では無く, matrix を用います.行列でデータを与える場合,XとYの座標には行と列の番号がそのまま 入ります.この例では,Xは0〜3,Yは0〜5となります.XとY座標の数値を与えたい場合は, set {x|y}tics を使って軸の目盛を設定します.以下は,Xの0〜2に対して 100から300の数値を与えた場合です. gnuplot> set xtics ("100" 0, "200" 1, "300" 2) gnuplot> splot "test3d.dat" matrix with lines |