第13週


gnuplot を使う


今週は大抵のUNIXシステムで利用できる、簡単なグラフ作成ツール gnuplot を使ってみましょう。

*関数のプロット

実験データなどをプロットしたい場合には、数値データファイルを用意して gnuplot にプロットさせるのが便利です。

*データのプロット

gnuplot は2次元プロットももちろんできます。

*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次元プロット

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 プロットで一本の線になるものを 何かつくってメイルにて送って下さい。

これで今週の課題は終了です。

今週の最初に戻る