2013年5月 岡山大学工学部情報系学科
まず,コマンドラインからgnuplotを起動します.
% gnuplot G N U P L O T Version 4.0 patchlevel 0 last modified Thu Apr 15 14:44:22 CEST 2004 System: Linux 2.4.23 Copyright (C) 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley and many others This is gnuplot version 4.0. Please refer to the documentation for command syntax changes. The old syntax will be accepted throughout the 4.0 series, but all save files use the new syntax. Type `help` to access the on-line reference manual. The gnuplot FAQ is available from http://www.gnuplot.info/faq/ Send comments and requests for help to <gnuplot-info@lists.sourceforge.net> Send bugs, suggestions and mods to <gnuplot-bugs@lists.sourceforge.net> Terminal type set to 'x11' gnuplot>
プロットを実行するコマンドは 2 つです.2 次元プロットでは plot ,3次元プロットでは splot を使います. gnuplotが表示するものは,関数かファイルに書かれた数値データです. 関数をプロットするには,plotコマンドに続いて,Xの範囲(3次元なら XとYの範囲)と 関数を与えます. 範囲を省略しても構いません. gnuplot解説書の定番であるy=sin(x)を表示してみましょう. plotコマンドに続けて,sin(x) をコマンドラインから与えます.
gnuplot> plot sin(x)
これが,gnuplotが表示する2次元グラフです.枠の線は,太い実線で描かれま す.これは,borderと呼ばれます. 凡例は,右上に表示されます. gnuplotでは,凡例をkeyと呼びます. X, Y軸には目盛(tics)が描かれ,目盛のある位置に数値が記入されます. この目盛は,major ticsと呼ばれる大目盛で,各区間は小さな目盛で さらに分割できます. この小目盛は,minor ticsと呼ばれます. 上の図では描かれていませんが,軸に名前を入れることができます. X 軸の名前はxlabelと呼ばれ,X 軸の中央下に表示されます. Y 軸の名前はylabelですが,この表示位置は,gnuplotが図を表示している 端末に依存します. ylabelは,90°回転した状態で Y 軸の左横に来るのが普通ですが, 端末によっては文字の回転が出来ないからです. その場合は,ylabelは Y 軸の上に書かれます.
表示範囲を指定しないとき,gnuplotは適当に X や Y の範囲をスケーリング してくれます. 上の例のように,Xの範囲を何も与えない場合,-10 から +10 の範囲が選ばれ, Y の範囲は,この X 区間で Y 座標がグラフからはみ出さない様に, 自動的に決定されます. X が 0 から 5 の範囲のみをプロットする場合, この範囲を[0:5]の様に指定します.
gnuplot> plot [0:5] sin(x)
プロットに関するパラメータは非常にたくさんあり,これらは setコマンドで変更できます.help コマンドで オンラインヘルプを見れば,setで変更できるパラメータの詳細が分かります.
gnuplot> help set The `set` command can be used to sets _lots_ of options. No screen is drawn, however, until a `plot`, `splot`, or `replot` command is given. The `show` command shows their settings; `show all` shows all the settings. If a variable contains time/date data, `show` will display it according to the format currently defined by `set timefmt`, even if that was not in effect when the variable was initially defined. Subtopics available for set: angles arrow autoscale bar bmargin border boxwidth clabel clip cntrparam contour data dgrid3d dummy encoding format ..... zero zeroaxis zlabel zmtics zrange ztics
幾つかの変数を変えてみましょう.まず,xlabelとylabelに文字列を与え て,軸に名前を付けます.文字列は必ず引用符で囲みます.次にXとYの範囲を 与えます.先程の例では,plotコマンドに続いて範囲を指定しましたが, xrangeとyrangeに値を設定しても表示範囲が変わります(注:rangeに範囲を設 定しても plot で別の範囲を指定するとplotの方が優先されます)
gnuplot> set xlabel "X-AXIS" gnuplot> set ylabel "Y-AXIS" gnuplot> set xrange [0:5] gnuplot> set yrange [-2:2] gnuplot> plot sin(x)
標準では,gnuplotは画面にグラフを表示します.この出力先を変えて, プリンタで印刷したりPostScriptの図を作ったりするために使うのが, set terminal コマンドです.gnuplotはターミナル毎に,それに合っ たドライバを使って図を描くことで,機種の依存性を無くしています.出力可 能なターミナルは, set terminal コマンドを実行すると分かりま す.
gnuplot> set terminal Available terminal types: unknown Unknown terminal type - not a plotting device table Dump ASCII table of X Y [Z] values to output linux Linux PC with (s)vgalib .... tpic TPIC -- LaTeX picture environment with tpic ¥specials pstricks LaTeX picture environment with PSTricks macros texdraw LaTeX texdraw environment mf Metafont plotting standard gnuplot> set terminal postscript Terminal type set to 'postscript' Options are 'landscape noenhanced monochrome dashed defaultplex "Helvetica" 14'
上の例のように, set terminal postscript とすると,gnuplot はPostScriptの図を生成します.そのままの状態でplotコマンドを実行すると, 出来上がったPostScriptは画面上を流れて行ってしまいます.この出力先を変 更するのが set output です.outputに続けて出力ファイル名を指 定すれば,PostScriptはこのファイルに出力されます.これをPostScriptプリ ンタに送れば印刷されたものが出来上がりです.
gnuplot> set output "plot.ps" gnuplot> plot sin(x)
数値データは,空白(スペースもしくはタブ)で区切られた カラムにします.行の先頭に#があると,その行は無視されます.
# 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次元データの場合のこれらを以下にまとめます.
データ表示形式 | カラム | using | with |
---|---|---|---|
(X,Y)のデータ | X Y | 1:2 | lines, points, steps, linespoints, boxes, etc. |
Yに誤差dY | X Y dY | 1:2:3 | yerrorbars |
Xに誤差dX | X Y dX | 1:2:3 | xerrorbars |
Yに誤差dY, Xに誤差dX | X Y dX dY | 1:2:3:4 | xyerrorbars |
Yの範囲[Y1,Y2] | X Y Y1 Y2 | 1:2:3:4 | yerrorbars |
Xの範囲[X1,X2] | X Y X1 X2 | 1:2:3:4 | xerrorbars |
Yの範囲[Y1,Y2], Xの範囲[X1,X2] | X Y X1 X2 Y1 Y2 | 1:2:3:4:5:6 | xyerrorbars |
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
別の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
gnuplotのドライバにはlatexというのがあり,これを使えばグラフを PicTeXにして出力してくれます.しかし,この方法は描く図によっては表示す る点の数が非常に多くなる場合があり,TeXの処理がメモリ不足で出来なくな ることがあります.従って,TeXに図を取り込む場合は,図をEPSで出力してお いて,LaTeXのgraphicsパッケージで読み込む方が簡単です.
まず,gnuplotで図をプロットし,出力ドライバをenhanced EPSにして, EPSのファイルを作っておきます.
gnuplot> set term postscript eps enhanced gnuplot> set output "test.eps" gnuplot> set key left top gnuplot> set size 0.5,0.5 gnuplot> set xrange [0:4] gnuplot> set yrange [0:4] gnuplot> set xlabel "Energy [MeV]" gnuplot> set ylabel "Cross Section [b]" gnuplot> set linestyle 1 lt 1 gnuplot> set linestyle 2 lt 1 pt 7 gnuplot> # for gnuplot ver.4 gnuplot> # set style line 1 lt 1 gnuplot> # set style line 2 lt 1 pt 7 gnuplot> plot 0.2536*x+1.1717 title "LESQ fit" ¥ > with lines linestyle 1,¥ > "test.dat" usi 1:2:3 title "data" ¥ > with yerrorbars linestyle 2
標準のままでEPSを作ると,図に比べて文字が小さくなりすぎてしまいま す. set term のオプションで大きめのフォントを指定するか,この 例の様に set size で全体を小さくしてしまいます.フォントの大き さは変わらないので,相対的に文字が大きくなります.
誤差棒付きの記号を描く場合,gnuplotのPostScriptドライバは,線種を1以 外にすると破線や点線で誤差棒を描いてしまいます.従って,実線で種々 の記号を描くには,linestyleを使い,lt(線種)には1 番(実線)を指定した上でpt(記号)の番号を変えます.
TeX(LaTeX2e)に図を貼り込むには,graphicsパッケージを使います.図を任 意の位置に挿入するには,¥includegraphics{ EPS file }を使います.EPS fileの所にEPSのファイル名を指定し ます.挿入時に,¥resizebox{X size}{Y size}を 使って図全体を拡大縮小することができます.図の縦横の比率を変えずに リサイズするには,X,Y sizeのどちらかに!を指定します.次の例は, figure環境に図を入れてキャプションを付けた場合です.図の横幅を120mm にしています.
¥documentclass{article} ¥usepackage{graphics} ¥begin{document} ¥begin{figure} ¥begin{center} ¥resizebox{120mm}{!}{¥includegraphics{test.eps}} ¥caption{This is a sample figure.} ¥label{test} ¥end{center} ¥end{figure} ¥end{document}
名前 | 部屋 | 内線 | メールアドレス |
---|---|---|---|
後藤 佑介 助教 | 202号室 | 8098 | gotoh あっとまーく cs.okayama-u.ac.jp |