今週は大抵のUNIXシステムで利用できる、簡単なグラフ作成ツール gnuplot を使ってみましょう。
実験データなどをプロットしたい場合には、数値データファイルを用意して gnuplot にプロットさせるのが便利です。
gnuplot は2次元プロットももちろんできます。
gnuplot はレポート作成や論文作成に役立つと思いますのでどんどん活用して 下さい。
それでは今週の課題です。
これで今週の授業は終わりです。 お疲れさまでした。
とにかく gnuplot を立ち上げましょう。
% gnuplot gnuplot>
gnuplot を立ち上げると少しメッセージが出た後にプロンプトが「gnuplot>」 となり gnuplot のコマンドモードになったことがわかります。 では手始めに簡単な関数をプロットしてみましょう。 関数をプロットするコンマンドは「plot」です。
gnuplot> set title "My Simple Function 1" gnuplot> plot x
上の例では、プロットする絵のタイトルを「set title」というコマンドで 設定しています。 後でどんな関数や数値をプロットさせたかがわかるようにタイトルを入れる ことをお勧めします。 タイトルは2個の「"」で必ず囲まないと gnuplot が理解できないということに 注意して下さい。 この例でプロットした関数は「y=x」です。 gnuplot の plot コマンドでは関数の引数は「x」であるとみなされます。 plot コマンドを実行すると新しくウィンドウが開き関数がプロットされた はずです。 関数をプロットする範囲は gnuplot が適当に設定してくれたはずです。
ではもう一つ別な関数をプロットしてみましょう。
gnuplot> set title "My Simple Function 2" gnuplot> set xlabel "X-Axis" gnuplot> set ylabel "Y-Axis" gnuplot> plot x**2
この例では、X軸とY軸の名前を入れています。 何のプロットかを理解するのに役立つように名前を付けましょう。 プロットした関数は「y=x**2(xの2乗)」です。 この様に gnuplot は大抵の関数をプロットしてくれます(cos(x), log(x), cos(x)+sin(x) など)。
今までの例では一度には一個の関数しかプロットしませんでした。 二個以上の関数を同時にプロットすることも出来ます。
gnuplot> set title "My Simple Functions 1 and 2" gnuplot> plot x,x**2
上の例のように二個以上の関数をカンマ「,」で区切って並べることで 複数の関数を一個の絵の中に収めることができます。
今までのプロットでは関数をプロットする範囲は gnuplot が勝手に決めて いました。 今度は範囲を自分で決めてみましょう。
gnuplot> plot [0.0:2.0] x,x**2
プロットの範囲は「[x1:x2]」の様に指定してやると、x1からx2の範囲が プロットされます。
いまX軸とY軸はともにリニアプロットになっていますが、ログプロットが 出来れば便利な場合があることを皆さんも知っていると思います。 ログプロットの例としてセミログプロット(片対数プロット)を試してみましょう。
gnuplot> set title "My Simple Function 3" gnuplot> plot [0.0:5.0] exp(-x) gnuplot> set title "My Semi-Log Plot" gnuplot> set logscale y gnuplot> plot [0.0:5.0] exp(-x) gnuplot> set nologscale y
最初の plot コマンドと二回目の plot コマンドの結果の違いがわかりますね。 「set logscale」コマンドと「set nologscale」コマンドでログをとるかどうか を変更します。
gnuplot にもパラメトリックプロットというのがあります。
gnuplot> set parametric gnuplot> set title "My Parametric Plot" gnuplot> plot cos(t),sin(3*t) gnuplot> noparametric
パラメットリックプロットというのはx座標とy座標が共通の変数 (ここではt)の関数で与えられているいる時に都合の良いプロット でしたね。 この例では「x=cos(t)」「y=sin(3*t)」となっています。 注意して欲しいのは gnuplot が理解できる共通の変数は「t」だということです。 最後の行のコマンドでパラメトリックプロットのモードを終了して通常の プロットのモードに戻っています。
gnuplot の使い方がわかってきたでしょうか。 「exit」あるいは「quit」コマンドで gnuplot が終了できます。
gnuplot> exit今週の最初に戻る
今度は関数のプロットではなくて、データのプロットをしてみましょう。 データファイルが用意されていますからコピーしてください。
% mkdir week13 % cd week13 % cp ~asakaguc/semia2.www/data/week13.dat ./ % cat week13.dat
見てわかるようにデータファイルの中には一行に三個データが書かれたものが ズラーと並んでいます。 三個のデータは各データのX座標、Y座標、Y座標の誤差を入れてあります。 このデータを gnuplot でプロットしてみましょう。
% gnuplot gnuplot> set title "My Simple Data Plot" gnuplot> set grid gnuplot> plot "week13.dat"
この例ではデータファイル中のX座標とY座標のみを使ってプロットを行ないます。 プロットする前に実行している「set grid」コマンドはプロット中にグリッドライン を入れるコマンドです。 ここではやりませんが「set nogrid」で解除できます。 データが入ったデータファイルは二個の「"」で挟む必要があります。
次はY座標の誤差も入れてプロットしてみましょう。
gnuplot> plot "week13.dat" with errorbars
エラーバー(誤差棒)が各データポイントに付きましたね。
数値データと関数を同時にプロットすることもできます。
gnuplot> "week13.dat",0.25*x+9.0 gnuplot> "week13.dat" with errorbars,0.25*x+9.0
二個目の例ではエラーバー付きでデータをプロットした上に関数をプロットして います。 見てわかるように、数値データの方にエラーバーを付けるという意味で 「"week13.dat" with errorbars」をひとかたまりに書いています。
今週の最初に戻る2次元のプロットを行なうコマンドは「splot」です。 さっそく使ってみましょう。
gnuplot> set title "My Simple 2D Plot" gnuplot> set zlabel "Z-Axis" gnuplot> splot [-10:10] [-10:10] x**2-y**2
2次元プロットでは新たにZ軸が付け加わるので、Z軸の名前を付けています。 プロットの範囲指定は2次元ですからXとYについて行ないました。
プロットを見る角度を変えてみましょう。
gnuplot> set view 80,30 gnuplot> splot [-10:10] [-10:10] x**2-y**2 gnuplot> set view 25,30 gnuplot> splot [-10:10] [-10:10] x**2-y**2 gnuplot> set view 60,60 gnuplot> splot [-10:10] [-10:10] x**2-y**2
いまのプロットのタイプは surface です。 このタイプを contour(等高線)にすることもできます。
gnuplot> set nosurface gnuplot> set contour gnuplot> set view 0,0 gnuplot> splot [-10:10] [-10:10] x**2-y**2
プロットが粗いためにあまり奇麗ではありませんが等高線が描けたはずです。 「set view 」コマンドは等高線が見易いように設定しました 元の surface のタイプに戻すには以下のコマンドが使えます。
gnuplot> set nocontour gnuplot> set surface
1次元のプロットの所で出てきたパラメトリックプロットは、2次元のプロット でも使えます。 ただし違う点が二点あります。 第一点は共通の変数(媒介変数と呼ばれます)が一個ではなくて二個ある点です。 第二点は媒介変数の名前が「u」と「v」になっている点です。 従って1次元プロットではパラメトリックプロットは一本の線を描きましたが、 2次元では一本の線あるいは1枚の曲面を描きます(媒介変数を一個しか用い ないと線になります)。 一本の線になる例を一つ見てみましょう。
gnuplot> set view 60,30 gnuplot> set parametric gnuplot> splot cos(u),sin(u),u
一本の螺旋が描けたはずです。 次に一枚の曲面になる例を見てみましょう。
gnuplot> splot exp(-0.1*v)*cos(u),exp(-0.1*v)*sin(u),u
以上2次元のプロットのし方でしたが楽しめたでしょうか。
今週の最初に戻る今週の課題はいくつかのプロットを gnuplot で描いてもらいます。 課題の回答を出してもらう都合上、gnuplot のコマンドを書いたファイルをつくって もらい、それをメイルで送ってもらいます。 実は gnuplot にはファイルからコマンドを読み込む機能もありますので、 2度手間にはならないと思います。 gnuplot のコマンドを書いたファイルを読み込むには「load」コマンドを 使います。 コマンドファイル名が command.file だとすると以下のようになります。
gnuplot> load "command.file"
ファイル名は必ず二個の「"」で囲んで下さい。
では最初の課題として、自分の好きな関数を1次元プロットしてみて下さい。 どういう関数をプロットしたかがわかるように必ずわかり易いタイトルを付けて 下さい。 X軸とY軸にも名前を付けましょう。 グリッドが出るようにして下さい。 プロットの範囲も必ず指定しましょう。 新たにファイルをつくって全てのコマンドを書き込み、思い通りのプロットが 描けたら、そのファイルをメイルで送って下さい。
% emacs week13.plot1 % gnuplot gnuplot> load "week13.plot1" gnuplot> exit % mail -s 'サブジェクト' asakaguc@sci.hiroshima-u.ac.jp u0872000 \ < week13.plot1
2番目の課題としては、2次元の surface プロットを何かつくって、メイルにて 送って下さい。 最初の課題と同様に奇麗なプロットに仕上げて下さい。
3番目の課題として、2次元の parametric プロットで一本の線になるものを 何かつくってメイルにて送って下さい。
これで今週の課題は終了です。
今週の最初に戻る