-
Notifications
You must be signed in to change notification settings - Fork 8
Introduction.ja
GnuplotへのRubyインターフェースです。シンプルなAPIが特徴です。
最初の例:
require "numo/gnuplot"
Numo.gnuplot do
set title:"Example Plot"
plot "sin(x)",w:"lines"
end
これを実行すると、以下の文字列がGnuplotのコマンドラインに送られます。
set title "Example Plot"
plot sin(x) w lines
このように、set
や plot
メソッドの引数に、Gnuplotのオプションを文字列やシンボルで列記すれば、ほぼそのままGnuplotのコマンドラインとして展開します。
Numo.gnuplot do
と end
の間のブロックは、Numo::Gnuplotクラスのインスタンスのコンテキストで評価されます。
つまり set
や plot
メソッドのレシーバを省略できます。この場合のレシーバは、自動的に生成されたGnuplotクラスのインスタンスです。
plot の引数に w:"lines"
と書かれているのは、Rubyのキーワード引数の記法です。
これは引数に {:w => "lines"}
つまりシンボル:w
をキー、文字列"lines"
を値に持つ Hash を与えることと同じ意味です。
Numo::Gnuplot の特徴として、 plot
メソッドの引数にデータ配列を与えると、そのデータをプロットする仕様があります。
require "numo/gnuplot"
x = (0..100).map{|i| i*0.1}
y = x.map{|i| Math.sin(i)}
Numo.gnuplot do
set title:"X-Y data plot"
plot x,y, w:'lines', t:'sin(x)'
end
オプション引数については、StringやSymbolの場合、スペースを挟んでほぼそのままGnuplotのコマンドラインに展開されます。 Hashの場合も、w:"lines" は w lines に展開されます。
シンボルにアンダースコアが含まれている場合は、スペースに変換されます。
set format_x:"%2.0f" -> set format x "%2.0f"
title などがキーの場合は、値の文字列はクォートされる、などという例外はあります。 シンボルはクォートされません。 クォートされる属性の一覧は次の通り。
background commentschars dashtype decimalsign file fontpath
format locale logfile missing name newhistogram output prefix
print rgb separator table timefmt title
x2label xlabel y2label ylabel zlabel cblabel clabel
文字列をクォートしたくない場合、例えば title の値をGnuplotの変数または関数で与えたい場合は、
title_nq:"LABEL"
のように _nq あるいは _noquote をつけるとクォートしません。
あるいは、 title: :LABEL
のようにシンボルで与えればクォートしません。
1.5..3.5 -> [1.5:3.5]
配列の要素が数値の場合は、カンマでつなげられます。
[1,2,3] -> 1,2,3
例外として、using と every のとき、コロンでつなげられます。
using:[1,2,3] -> using 1:2:3
配列の要素が数値でないときは、空白区切りになります。
[:with,"lines"] -> with lines
ArrayやHashはネストできます。
fs:["transparent", {solid:0.5}, :noborder] -> fs transparent solid 0.5 noborder
キーワード引数の記法をArray内に書くこともできます。この場合、HashオブジェクトがArrayの最後の要素となります。
["transparent", solid:0.5]
と書くと、
["transparent", {solid:0.5}]
という意味です。ここで注意が必要なのは、キーワード記法はArray内の最後に書く必要があることです。次のように途中に書くことはできません。
["transparent", solid:0.5, :noborder] # => SyntaxError
plot や splot の引数に、範囲、関数、オプションを記述します。
plot 0..5, -1..1, "sin(x)", with:"lines"
複数の関数をプロットするときは、配列で囲う方法と、オプションのハッシュで区切る方法があります。
plot ["sin(x)", with:"lines"], ["cos(x)", with:"lines"],
plot "sin(x)", {with:"lines"}, "cos(x)", {with:"lines"}
変数 x,y が数値配列データであるとして、
plot x,y, with:"lines"
データ系列が複数のときは、配列で囲う方法と、オプションのハッシュで区切る方法があります。
plot [x1,y1, with:"lines"], [x2,y2, with:"lines"],
plot x1,y1, {with:"lines"}, x2,y2, {with:"lines"}
オプションがない場合でも、空のハッシュを与える必要があります。(上は2次元配列と区別するため。下は区切りのため。)
plot [x1,y1,{}], [x2,y2,{}],
plot x1,y1,{}, x2,y2
ファイルに書かれたデータをプロットするときは、ファイル名を引用符で挟んだ文字列を与えます。
plot "'result.dat'"
オプションに using が含まれる場合は、自動的に引用符がつけられます。