gnuplot

invalid colorbox option ??

gnuplot 4.2 patch level 3 で保存したファイルを patch level 2 の gnuplot で load すると

gnuplot> load "FL.gnu4

gnuplot> set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.1, 0.63, 0 front bdefault
                                                                                  ^
         "FL.gnu4", line 141: invalid colorbox option

てな error が。4.2.3 に上げて解決。 patch level 3 で colorbox に front option というのが加わったということかな。

pause

gnuplot の設定ファイルを引数で渡して図を描画させると、一瞬表示した後に消えてしまう。これを防ぐには設定ファイルの末尾に pause -1 を加えておけばよい。こんなかんじ↓

#!/usr/bin/gnuplot
set term x11
plot sin(x)
pause -1

こうすると terminal で改行を入力するまで表示される。

また -persist オプション付きで起動すると改行を入力した後も図は表示され続ける。

ギリシャ文字と斜体

set ylabel "{/Symbol-Oblique D}({/Italic z}) / {/Symbol-Oblique p} {/Italic T_c}"

のようにして、

set term post eps enhanced "Arial" 24 lw 3 dl 3

みたいにする

初期設定

~/.gnuplot というテキストファイルの中に設定を書くことで、初期設定可能

splot

こんな絵が描きたいとき。hoge.png

次のようなデータを作る。

#  omega,  theta,  n
4.970000e-01 5.050000e+01 1.809472e-02
4.970000e-01 6.917188e+01 2.280921e-02
4.970000e-01 8.387644e+01 2.176572e-02
4.970000e-01 9.304867e+01 1.962956e-02
4.970000e-01 9.759271e+01 3.569119e-02

4.960000e-01 5.050000e+01 1.641266e-02
4.960000e-01 6.917188e+01 2.930498e-02
4.960000e-01 8.387644e+01 2.568140e-02
4.960000e-01 9.304867e+01 1.705182e-02
4.960000e-01 9.759271e+01 2.670954e-02

4.950000e-01 5.050000e+01 1.508653e-02
4.950000e-01 6.917188e+01 4.174454e-02
4.950000e-01 8.387644e+01 3.351103e-02
4.950000e-01 9.304867e+01 1.529229e-02
4.950000e-01 9.759271e+01 2.122146e-02

のような空行で区切ったデータを用意して

set hidden3d
splot "hoge.d" with lines

とすればよい。

目盛

手動で目盛を付けたい時

set xtics   ("0" 0.00000, "0.3" 0.300000, "a" 0.650000, "1.0" 1.00000)

のようにすると、x軸の 0.0, 0.3, 0.65 1.0 の位置に目盛を刻んでくれる。また 0.65 の位置には a と表示される。またグリッドを表示するには以下のように

set grid

目盛の文字

上記の方法により手動で目盛を付けた際、記述する文字の向きを変えたりや位置をずらすには、 rotate by や offset を用いればよい

set xtics ("0" 0.0, "hogehogehoge" 0.1, .....)
set xtics rotate by 45 offset 0.0,-0.1

のようにすれば、目盛に付けられる 0 や hogehogehoge という文字を 45 度回転し、(0.0,-0.1) ほどずらした位置に配置できる

点を打つ

任意の場所に点を打つには label を使う

set label 1 "" point pt 7 ps 2 lc rgb 'red' at 0.2, 0.3

pt 7 は丸い点、ps 2 はサイズ、lc rgb 'red' は色指定

y2軸を使う

y軸だけでなく、y2軸も使うときは次のように axes を指定

set y2tics
plot "hoge.d" using 1:2 axes x1y1, "hoge.d" using 1:3 axes x1y2

set y2tics が無いと、y2軸の目盛(数値)を書いてくれない

grid

グリッド線を引くには

set grid

これで x軸と y 軸に関して目盛に合わせた grid 線が引かれる

もし、x軸に関して grid 線を引きたくない場合には次のように

set grid noxtics

y2 軸に対して grid を引くには

set grid y2tics

複数の 2D plot をまとめて 3D plot (たぶん普通じゃない使い方)

データ形式が x, y1, y2, y3, y4, y5, ... のようなデータファイル hoge.d があったとき、通常なら

plot "hoge.d" u 1:2, "hoge.d" u 1:3, "hoge.d" u 1:4, "hoge.d" u 1:5, ...

のようにして 2D プロットするが、描かせる線が多い場合、線が重なってしまってよく分からなくなることがある。このような時、各線を一平面上に重ねた 2D プロットするのではなく、各線の様子をみるために別々の平面上にプロットして 3D 的にぐりぐり回して俯瞰できたらいいな、ということがある。 それを splot で実現するための方法について頭を悩ませていたのだけど、簡単な方法をひらめいたのでメモしておく。(見つけてないけど何処かに書いてあるかもしれない。いろいろ調べてみたのだけど、splot についてあれこれ書いている人は少ないみたい。)

結論だけ書くと実はかなり簡単。

 splot "hoge.d" u (1):1:2, "hoge.d" u (2):1:3, "hoge.d" u (3):1:4, "hoge.d" u (4):1:5, ...

splot の場合、(x,y,z) のセットでデータを与えないといけない。using option で : (コロン)で区切った各データ列を与える必要があるわけだ。ここでは、 x 列を線の番号とし、y 列を data x 、z 列を data y1 or y2 or... としたという話。(なんで x 列の数字をカッコで囲んでいるかの説明は書かないよ。分からない人は調べてね。)

あと、 x 列の目盛りに意味がないので、たとえば次のようにして変えておくといいかも。x 列の目盛り自体を書かないというのもありですね。

set xtics ("A" 1.0, "B" 2.0, "C" 3.0, "D" 4.0, ... )

line type

version 4.6 と 5.x 以降では、線の style の扱いが若干違うらしい。(linetype じゃなくて dashtype で制御するとか terminal option の solid/dashed が無くなったとか。) ここでは version 4.6 での話。default の線種がどうも気に入らないということで、どの line type を使うか判断するため default 値のメモ

linetype線種
1実線
2破線
3破線(短)
4点線マゼンタ
5一点鎖線シアン
6実線
74点グレー
8二点鎖線
92点
10一点鎖線(短)

例えば 4 番の色を青色に変更するには

set linetype 4 lc "blue"

の様にする。

なお、モノクロのグラフにする際には、上記のような line color の変更をしない方が良い。line color を変更したら、線種がずれてしまう。(バグっぽいような…)

line type (補足)

4.6 と 5.x の違いについて、stackoverflow のここ に書かれた内容が分かりやすい。あと日本語であれば こちらとか。

例えば、線の配色については 3つのセットがあるらしい。set colorsequence (set colors) で変えられる。

set colors default              # 5.x 系の配色(color universal design を考慮)
set colors podo                 # color universal design の別配色(Wong (2011) [Nature Methods 8:441])
set colors classic               # 4.6 系の配色

5.x 系になって、配色が universal design を考慮したものになったうえ、 terminal によって色が変わらないようにもなったらしいので、5.x 系に移るべきかな。

文字変数

例えば、hogehogeahoaho1.d みたいな長ったらしい名前のデータファイルを plot するときに

plot "hogehogeahoaho1.d" u 1:2, "hogehogeahoaho1.d" u 1:3, "hogehogeahoaho1.d" u 1:4, ...

のように書くと見にくいし、ファイル名を変えるのも面倒。こんな時は

n="hogehogeahoaho1.d"

と n に代入したのちに、

plot n u 1:2, n u 1:3, n u 1:4, ...

とした方がすっきり。もちろん次のように一行にまとめても良し。

n="hogehogeahoaho.d"; plot n u 1:2, n u 1:3, n u 1:4, ...

これなら、ファイル名変更も一か所だけでラクチン。

for と sprintf

たくさんのデータファイルを順次表示するとか、繰り返し操作が必要なときの話。繰り返しは for loop を使い、変化する文字列は sprintf を使う。

例えば、 hoge01.d, hoge02.d, hoge03.d,... といったデータファイルがあったとき、それを順次グラフ化するには

do for [i=0:15] {  n=sprintf("hoge%02d.d", i); plot n u 1:2, n u 1:3; pause 3; }

みたいにすればよい。

plot ""

ちなみに、同じファイルの異なる列を plot するとき

plot "hoge.d" u 1:2, "hoge.d" u 1:3

と書くかわりに

plot "hoge.d" u 1:2, "" u 1:3

のように略して書くこともできる。

サンプル数

組み込み関数でグラフを描く時、default のサンプル点が足りなくて正しく表示されないになる(ガタガタになる)ことがある。そんなときは

set sample 10000

みたいにすれば、10000 点のデータで描いてくれる

式(関数)の定義

ずっと知らずにいたのだけど、式を定義することができる。(今まで変数定義しか知らなかった。)なので、

> a(x)=sin(x)
> b(x)=cos(x)
> plot a(x)*b(x)

とやれば sin(x)*cos(x) を描いてくれる。今更ではあるが、、、

Last modified:2019/06/06 10:24:27
Keyword(s):[gnuplot]
References:[Software]