gnuplot について。
-
起動の仕方 (対話型のプロンプト (gnuplot>) が立ち上がる。)
1
$ gnuplot
-
終了後にもグラフを残したい場合は、次のオプションを使う。
1
$ gnuplot -persist
-
終了の仕方
1
gnuplot>
exit
-
プロット内容を保存する方法
1
gnuplot>
save
"ファイル名"
-
プロット内容の読み込み方
または、シェルからいきなり実行 (-persist を付けないと実行後すぐに終了)
1
gnuplot>
load
"ファイル名"
1
$ gnuplot -persist < ファイル名
-
初等関数のグラフがカクカクするときは曲線を引くためのサンプル数が足りない。サンプル数を増やして対処する。
1
gnuplot>
set
samples
1000
-
キャンパスのサイズを変更
sample: term = x11, XX = 640, YY = 450
1
gnuplot>
set
term
<terminal_type>
size
<XX>, <YY>
sample: term = postscript, XX = 6.4, YY = 4.5 -
メモリ (tics) の追加
1
gnuplot>
set
xtics
add (
"Pi" pi, "2 Pi"
2*
pi
)
-
エラーバー (y 軸の対称誤差を表示)
1
gnuplot>
plot
sample
.txt
using
<
x
-val>:<
y
-val>:<
y
-error>
with
yerrorbars
-
データを間引く (every を使う)。
1
gnuplot>
plot
<データファイル>
every
<行刻み>:<ブロック刻み>:<スキップする行数>:<スキップするブロック数>:<終了行>:<終了ブロック>
- 覚え方:
- 1. ステップ 2. スキップする数 3. 読み込み終わり
- の順番で、それぞれ
- 1. 行 2. ブロック
- の順番に並べる。
- よくある例)
-
i+1 行目からプロット
1
gnuplot>
plot
<データファイル>
every
::i
-
データを間引くために奇数行だけ読み込み
1
gnuplot>
plot
<データファイル>
every
2
-
データを間引くために偶数行だけ読み込み
1
gnuplot>
plot
<データファイル>
every
2::1
-
第 2 軸を第 1 軸と関連づける
(cf:
gnuplot demo script: linkedaxes.dem
)
2 次元のプロットに関して、反対側の座標軸 (x2, y2) を設定することができる。そして、しばしば 1 軸と 2 軸で値を関連させたい場合がある。単純に定数倍かもしれないし、逆数だったり指数関数かもしれない。これらを実現するのが、 set link コマンドだ。 基本的には、の形で記述する。1
set
xtics
nomirror
;
set
x2tics
2
set
link
x2
via
<関数> inverse <逆関数>
1 対 1 対応させるのだから、一つの関数でいいように思うが、gnuplot 内では逆関数が導けないので (多分) 逆関数も自分で与える必要がある。 y2 軸に関して設定したければ、x2 を y2 で置き換える。また、<関数>および、<逆関数> で使う変数は、x2 のとき x、y2 のとき y である。
例えば、参照先の例のように eV と Å を関連付けたい場合は、とすればいい。1
set
link
x2
via
12398./
x
inverse 12398./
x
これはつまり、最初の <関数> で、
x2 = 12398./x
そして、次の <逆関数> で、
x = 12398./x2
を設定しているということである。<逆関数> では変数に x2 ではなく x を用いることに注意する。
ところで、片方を log スケール (10 の何乗か) でプロットした場合は、以下のような振る舞いをするので注意する。
先に示したコマンドで送られる値は全て常対数 (log10) になる。
例えば、とすると、1
set
log
x
2
set
link
x2
via
3.0*
x
inverse
x
/3.0
x2 = 3.0*x
で x2 および x を対数で置き換えたもの log10x2=3log10x=log10x3 がプロットされ、x2 軸は x3 のスケールでプロットされる。
なので、以下のように順序立てて考えると、- 定数倍したい x2=ax⇒log10x2=log10(ax)=log10x+log10a⇒˜x2=˜x+log10a
- ベキ乗したい x2=xb⇒log10x2=log10xb=blog10x⇒˜x2=b˜x
- シフトしたい x2=x+c⇒log10x2=log10(x+c)=log10(10log10x+c)⇒˜x2=log10(10˜x+c)
例えば、以下のように呼び出す。1
# log scale link functions: x2 = a x^b + c
2
fwd(
x
,a,
b
,c) =
log10
(a*10**(
b
*
x
)+c)
3
inv(
x
,a,
b
,c) =
log10
((10**
x
-c)/a)/
b
1
set
log
x
2
a = 2.0;
b
= 2; c = 0.1
3
set
link
x2
via
fwd(
x
,a,
b
,c) inverse inv(
x
,a,
b
,c)