Gnuplot とは
Gnuplot (ぐにゅーぷろっと)は非常に多機能なグラフ作成ツールです。 関数のグラフを作成したり、実験データをプロットすることができます。 レポート作成などに威力を発揮するでしょう。 (エクセルで作ってもよいですが。)
起動と終了
ターミナルから gnuplot
と入力すると gnuplot が起動し、コマンドを受け付ける状態になります。
(以下の例の1行目の $
はシェルのプロンプトなので入力する必要はありません。
「gnuplot
」だけをキーボードから入力し、リターンキーまたはエンターキーを押します。)
$ gnuplot [RET] … Terminal type set to 'wxt' gnuplot>
gnuplot>
は Gnuplot のプロンプトです。
このプロンプトに対してコマンドを入力します。
Gnuplot のプロンプトに対して quit
または単に q
と入力し、リターンキーまたはエンターキーを押すと終了します。
gnuplot> quit [RET] $
ヘルプ
help コマンドでオンラインヘルプをみることができます。
gnuplot> help plot または gnuplot> ? plot
とすると plot コマンドについての説明をみることができます。
リセット
reset コマンドでいろいろな設定(描画範囲など)を初期状態に戻すことができます。
gnuplot> reset
グラフを描いてみる
グラフをプロットするには plot
コマンドを使います。
まずは正弦関数 sin(x)
のグラフをプロットしてみましょう。
gnuplot> plot sin(x)
複数のグラフを重ねて表示したい場合はカンマで区切って指定します。
gnuplot> plot sin(x), cos(x)
すでに作図したグラフに別のグラフを重ねるには replot
コマンドを使います。
gnuplot> replot sin(2*x)
数学関数
Gnuplot にはいろいろな関数が用意されています。 自分で新しい関数を定義することもできます。(後述)
sin, cos, tan 三角関数 asin, acos, atan, atan2 三角関数の逆関数 sinh, cosh, tanh 双曲線関数 asinh, acosh, atanh 双曲線関数の逆関数 exp, log, log10 指数関数、自然対数、10を底とする対数関数 sqrt, abs 平方根、絶対値 他にも多数
演算記号
四則演算などの演算記号は次のようになります。
+ 足し算 - 引き算 * かけ算 / 割り算 % 剰余 ** 累乗(x**2 は x の2乗を表します)
演算子の優先順序に注意しましょう。 心配なときは (…) でグルーピングするとよいでしょう。
1 + x * 2 1 + (2 * x) として計算される 2**x + 1 (2**x) + 1 として計算される 2**(x + 1) 2**(x + 1) として計算される
円周率πが定数として組み込まれています。
pi 3.1415…
整数同士の計算
Gnuplot では整数と実数(浮動小数点数)が区別され、整数同士の演算では整数の範囲内で計算が行われます。
例えば、整数同士の割り算 7/3 は答えが 2 となります。
次の例を試してみましょう。
(C-p
または ↑ キーで以前の入力を再利用できます。)
gnuplot> print 1 / 3 gnuplot> print 2 / 3 gnuplot> print 3 / 3 gnuplot> print 4 / 3 gnuplot> print 5 / 3 gnuplot> print 6 / 3
7/3 = 2.333…という結果が欲しい場合は、7 か 3 を実数(浮動小数点数)にします。
7.0
は 0 を省略して 7.
と書くこともできます。
gnuplot> print 7. / 3. gnuplot> print 7.0 / 3 gnuplot> print 7 / 3.
整数と実数の混じった計算では、整数が実数(浮動小数点数)に変換されてから計算されます。 7.0/3 と 7/3.0 では整数が実数に変換されてから計算され、どちらも 7.0/3.0 と同じ意味になります。
整数が x などの変数と組み合わされて使われる場合は、x が実数と解釈されるので、整数は自動的に実数に変換されます。
x + 2 -> x + 2.0 と同じ 2 * x -> 2.0 * x と同じ x + 1/2 -> x + 0 と同じ(要注意!) x + 0.5 と書かないといけない。
練習
次の関数をプロットしてみましょう。
x * sin(x)
tanh(x)
sin(x) + sin(3*x)/3 + sin(5*x)/5 + sin(7*x)/7 + sin(9*x)/9
グラフがガタガタになってしまう場合は set samples
でサンプリング数を増やして下さい。
gnuplot> set samples 2000 gnuplot> plot sin(x)+sin(3*x)/3+sin(5*x)/5+sin(7*x)/7+sin(9*x)/9
最後の例は矩形波(凹凸状の関数)のフーリエ級数展開になっています。 グラフがジャンプしている付近のデコボコは項の数をどんなに増やしても消えません。 これを「ギブス現象」といいます。 項の数を増やして試してみましょう。
グラフを描いてみる (2)
作図範囲の指定
作図範囲(x 軸と y 軸の範囲)を指定するには
set xrange
,
set yrange
コマンドを使います。
値の範囲は [上限:下限]
のように指定します。
x 軸の範囲を -π
から +π
にする場合は
gnuplot> plot sin(x) gnuplot> set xrange [-pi:pi] gnuplot> replot
とします。
replot
コマンドを使うと、グラフを新しい範囲で描き直してくれるので、範囲をいろいろ変えながらプロットする場合には便利でしょう。
y 軸の範囲についても同様です。
作図範囲の指定を取り消す場合は unset xrange (yrange)
コマンドを使います。
gnuplot> unset xrange
set xrange
や set yrange
を使わずに範囲を指定することもできます。
plot コマンドに続けて x の範囲と y の範囲を指定すれば OK です。
plot [xの範囲] [yの範囲] 関数1, 関数2, ...
x の範囲だけを指定し、[yの範囲]
を省略することもできます。
sin(x), tan(x) のグラフを
x の範囲 (-2π, 2π)
,
y の範囲 (-5, 5)
でプロットするには次のようにします。
gnuplot> plot [-2*pi:2*pi] [-5:5] sin(x), tan(x)
グラフに名前をつける
plot コマンドに title
オプションを指定するとグラフに好きな名前をつけることができます。
gnuplot> plot sin(x) title "f(x)" gnuplot> plot sin(x) title "f(x)", cos(x) title "g(x)"
title ""
とするとグラフ名の表示を消すことができます。
gnuplot> plot sin(x) title ""
サンプル数の設定
グラフ表示のサンプル数(何点を使ってグラフを描くか)を set samples
で設定できます。
不連続な点の近くで関数を描く時は大きめのサンプル数を指定するとよいでしょう。
gnuplot> set samples 10 gnuplot> plot [0:pi] [-10:10] tan(x) gnuplot> set samples 1000 gnuplot> plot [0:pi] [-10:10] tan(x)
描画スタイルの変更
plot コマンドに with
オプションを指定すると、いろいろなスタイルで関数をプロットすることができます。
gnuplot> plot sin(x) with points
他にも
- lines
- linespoints
- dots
- steps
- points
- impulses
- fsteps
など、いろいろなスタイルが用意されています。 試してみましょう。
スタイルを一括して変更するには set function style
を使います。
ステップ(階段)関数で表示するには
gnuplot> set style function steps gnuplot> plot sin(x)
とします。
デフォルトの設定に戻すには reset
コマンドを使います。
対数プロット
対数軸で関数をプロットすることも可能です。
gnuplot> plot exp(x) gnuplot> set logscale y gnuplot> replot
対数プロットをやめるには unset
コマンドを使います。
gnuplot> unset logscale y
x 軸と y 軸の両方を対数プロット(両対数軸)にするには
gnuplot> set logscale xy
とします。
3次元プロット
基本
splot
コマンドを使うと2変数の関数 z = f(x,y)
のグラフをプロットすることができます。
f(x,y)
は平面上のある地点 (x,y) での山の高さや地表面気圧の分布を表すような関数だと思えばよいでしょう。
gnuplot> splot sin(x/5)*cos(y/5)
set pm3d
コマンドでカラーマップを使った3次元表示が可能です。
gnuplot> set pm3d gnuplot> splot sin(x/5)*cos(y/5)
set view
コマンドで視点を変更することができます。
gnuplot> set view 50,60 gnuplot> replot
このようにすると、画面に対して右向きが x 軸、上向きが y 軸、手前方向が z 軸であった座標系を、x 軸周りに50度、z 軸周りに60度回転させたグラフの射影像が得られます。
view
コマンドはあと2つの引数を取ることができます。
その意味についてはオンラインマニュアルなどを参照してください。
コンター(等高線)プロット
等高線図を描くには set contour
コマンドを使います。
gnuplot> set contour gnuplot> splot sin(x/5)*cos(y/5)
等高線をグラフの曲線上に重ねるには surface
オプションを指定します。
gnuplot> set contour surface gnuplot> replot
等高線の描き方を変更するには cntrparam
の値を調整します。
次の例は等高線の刻みを 20 に設定します。
gnuplot> set cntrparam levels auto 20
x-y 平面に等高線だけを表示するには、次のようにするとよいでしょう。
gnuplot> unset surface gnuplot> unset ztics gnuplot> set view 0, 0 gnuplot> splot sin(x/5)*cos(y/5)
本日の課題
- 2次関数
x*x-1
のグラフを[-3:3]
の範囲でプロットせよ。 - 3次関数
(x-1)*x*(x+1)
のグラフを[-3:3]
の範囲でプロットせよ。 - y 軸の範囲を
[-2:2]
として、上の2つの関数を同時にプロットせよ。 x*sin(x)
,x
,-x
を重ねてプロットせよ。見やすい値の範囲を工夫すること。