gnuplotの古くからの機能を使ってる人(私を含む)のためのメモ。
💡 gnuplot 5.4を対象に、最近のバージョンアップで追加された機能、今のバージョンで使える便利そうな機能などを以下に示す
古くからある機能でも便利そうなものについては言及している
プログラミング関連
変数
-
array name[size]で配列(Array)が使用可(例:Array A = [1,2,3])- 文字列、整数、実数、複素数を要素とできる
- 要素の混在も可
-
|A|: 配列Aのサイズ
- 現在の内部状態を直前の描画を反映した読み出し専用の定義済み変数
- それらの変数は名前が
GPVAL_で始まる -
show variables all: それらの変数を含めた変数の一覧の表示
- それらの変数は名前が
制御構造
-
ループブロックにおいて、
break,continueが使用可 -
for [stringvar in "A B C D"]の形で文字列変数による繰り返しをplotコマンドなどに用いることが出来る -
ループとして、以下の形式でwhileも使用可
while (<expr>) { <commands> }
マクロ置換
-
下記例の様に、
@VARNAMEの形で文字列変数に定義した文字列によりコマンド文字列を置換できるstyle1 = "lines lt 4 lw 2" style2 = "points lt 3 pt 5 ps 2" range1 = "using 1:3" range2 = "using 1:5" plot "foo" @range1 with @style1, "bar" @range2 with @style2
evalコマンド
-
eval <string expression>により動的に生成されるコマンド文字列を実行できる -
下記例の様に、パラメータを変えて同じコマンドを複数回実行する場合に便利
set_label(x, y, text) \ = sprintf("set label '%s' at %f, %f point pt 5", text, x, y) eval set_label(1., 1., 'one/one') eval set_label(2., 1., 'two/one') eval set_label(1., 2., 'one/two')
グラフ形式
-
splot with plygons: 多面体の面データを読み込んで描画 -
set spiderplot: クモの巣グラフset style siderplot
-
set table: テーブルモードが有効な場合に、plot,splotで表形式の描画 -
set mapping {cartesian | spherical | cylindrical}で座標系を指定することで、splotで球面座標や円柱座標でデータを与えることができる
グラフ化対象データ関係
-
set datafile fortranを実行することで、fortranの数値書式で書かれたファイルを読み取れる -
set datafile missingにより、データファイル中で欠損データを表す文字列を指定することが出来る(gnuplotでは欠損データと無効な値は区別されている)
plotコマンドの引数関係
範囲(range)
-
plotコマンドの1番最初の項目として、軸の範囲の指定が可能
plot [<xrange>][<yrange>][<x2range>][<y2range>] -
各範囲の指定は、以下の形式
[{<dummy-var>=}{{<min>}:{<max>}}]
[{{<min>}:{<max>}}] -
minまたはmaxとして、
*を指定すると最小値や最大値を自動的に使用される- 自動的に決められる値に対して、下限・上限を
{ <lb> < } * { < <ub> }の形で指定出来る- 例:
[0 < :*]は、最小値を0以上で自動決定した範囲
- 例:
- 自動的に決められる値に対して、下限・上限を
-
各グラフ化対象(特に関数)に対しても範囲指定が可能
plot [-1:1] [0.5:1] sin(x)-
全体に対する範囲であるかあいまいになる場合にはキーワード
sampleを用いるplot sample [0.5:1] sin(x)
-
using
- 文字列定数を指定すると、その文字列はscanf関数の書式指定文字列として解釈され、それを用いてファイルから読み取られる
-
using 1:($2+$3)の形式で列のデータにより計算した値を指定することが可能 -
$2はcolumn(2)の略記 -
column($#): 最終列 ($#は列数を表す) -
column(**NAME**): ヘッダーで列名がNAMEとなっている列(set key autotitle columnheadを実行のこと) -
usingのパラメータに列番号ではなく、ヘッダーで決まった列名を指定することも可 -
column(0): データ集合内での各点の順番。順番は0 から始まり、空行やコメント行でない行で増え、2 行の連続する空行でリセットされる(略記$0 も使用可) -
column(-1): この番号は0 から始まり、1 行の空行で増え、2 行の連続する空行でリセットされる。これは、行列、または格子状データ内のデータ行に対応。また、データ集合
内の別々の線分や多角形を区別するのにも使える。 -
column(-2): 0 から始まり、2 行の連続する空行で増えます。これは、複数のデータ集合を持つファイル内の、現在のデータ集合のindex 番号 -
column($#): 特別な記号$# は、存在する全列数と評価されるゆえ、column($#)は、現在の入力行の最終列(最右列)を参照。同様にcolumn($# - 1)は、最終列の一つ手前の列、などとなる。
title
-
title columnheaderまたはtitle columnheader(N)を指定することで、列名を系列タイトルとして表示させることが可能 - オプション指定
at beginningまたはat endを指定することで、系列タイトルを描画される曲線の最初または最後に書かせることが可能
スタイル要素関連
-
titleはplot実行後に評価されるように変更された。plot時に計算される値を参照可 - pointsize, pointtype, colorの指定をキーワード
variableとすることで、データの値を用いることが可能に-
using指定が無い場合には、x,y,pointsize,pointtype,colorの順に解釈される -
using指定もこの順
-
-
plotコマンドのaxesパラメータでx1y2などと指定することで、x軸またはy軸を2軸目とすることが出来る
外部出力、Terminal関連
-
set term windowsでグラフメニューより、EMFファイルやPNGファイル(ビットマップファイル)で出力可能
saveコマンド
- 以下のキーワードを指定することで、特定のものだけをファイルに保存できる
save terminalsave variablessave terminalsave setsave fit
その他
-
stats 'filename': 簡単な統計情報の提供 -
グラフに追加する近似曲線を得るために、
fitコマンドにより、非線形最小二乗法当てはめのパラメータを計算することができるf(x) = a + b*x + c*x**2 fit f(x) 'measured.dat' using 1:2 via a,b,c plot 'measured.dat' u 1:2, f(x) -
plotコマンドのsmoothパラメータを用いることで、スプライン近似などが使える
指定可能な近似方法は以下
- bezier : ベジュ曲線
- csplines : Cスプライン
- mcsplines : 元の点の単調性と凸性をキープした3次スプライン
-
historyコマンドで出力ファイルを指定することにより、コマンド履歴をファイルに保存すること可能- saveコマンドで出力する場合には、デフォルト設定も保存されるが、それがない分シンプルとなる
- 個数を指定する(例:
history 10 “hoge.gpl”)ことで直前の指定分だけ保存させることも可能 -
historyコマンドの実行そのものは、履歴リストに加わらない(そのためカーソルキーによる履歴呼び出しでも出てこない)
-
testコマンドを実行することで、使っているterminalに対して、凡例に用いれる色名や線種などを表示させることができる -
set loadpathコマンドにより、読み込まれるファイルの検索パスを追加定義する- 複数のパスを追加する際には、コロン
:で区切る - 環境変数GNUPLOT_LIBも検索パスを定義する
- 複数のパスを追加する際には、コロン