チャチャチャおもちゃの抹茶っちゃ

ゲームのこととかプログラミングのこととか。気が向いたら書く。ブログタイトルは友人が考えました。

【gnuplot】使い方備忘録

gnuplotって?

gnuplot(ニュープロット しばしばグニュープロットとも)は、2次元もしくは3次元のグラフを作成するためのアプリケーションソフトウェアである。インターネットにおいて無料で配布されているフリーウェアである。1986年に最初のバージョンが開発された。現在では、LinuxUNIXWindowsmacOSなどの多くのオペレーティングシステム (OS) に対応したバージョンが開発されている。(Wikipediaより)

昔からあるグラフ作成ソフト。大抵のOSで動くので重宝する。Excelとかと違ってフリーで、レポートなどに便利なepsファイル出力もできる。

gnuplotのインストール

Linux(自分のはUbuntu)なら

$ sudo apt install gnuplot

管理者パスワードは入力しよう。

Windowsなら gnuplot - Browse /gnuplot at SourceForge.netから最新版のディレクトリを開いて対応するWindows用のインストーラをダウンロード。
ダウンロードできたら実行してインストールしておしまい。特別難しいことはないはず。

MacはもってないのでわからないけれどLinuxと似た感じなのかな。

使い方

WindowsならコマンドプロンプトLinuxならターミナルなり端末なりを開いてgnuplotと入力して起動する。

基本となる描画

gnuplot > plot sin(x)
gnuplot > replot

式やプロットすることができる。replotはまんまの意味でプロットし直し。後述する設定とかをいろいろいじった後にreplotすることがある。

実はここで変数を使うこともできる。

gnuplot > a = 2
gnuplot > plot a*x

f:id:mattyan1053:20181115151124p:plain
とかもできちゃう。詳しくは近似式のところで。 とりあえず次から説明する設定を変えたらいろいろplotしてみることになる。

データをプロットすることもできる。

gnuplot > plot "test.dat"

などとすれば描画できる。データはどのようにするかというと

1 10 100
2 20 200
3 30 300
4 40 400
5 50 500

のようなデータの場合、x軸は1列目、y軸は2列目に合うように描画され、3列目以降は無視される。
f:id:mattyan1053:20181115151808p:plain
任意の列の値を使いたい場合は

gnuplot > plot "test.dat" using 1:3

などと使う列を指定してあげるとその列を採用してくれる。

描画のスタイルは点や線などいろいろある。覚えておくと便利なのはlinespointslinespointsimpulsesboxesあたりだろうか。

gnuplot > plot "test.dat" with linespoints

などとwithをつければ良い。
f:id:mattyan1053:20181115152234p:plain

ちなみに、データのファイル名が使われてしまうのが嫌な場合は、タイトル付をしたり何もつけなかったりすることができる。

gnuplot > plot "test.dat" using 1:2 title "length"

f:id:mattyan1053:20181115155936p:plain

色をつけたいときはRGB値で指定して

gnuplot > plot sin(x) linecolor rgb "#FF0000"

一つのグラフに複数プロットしたいときは「,」で区切って

gnuplot > plot sin(x), cos(x)

とすれば良い。

近似式

gnuplotは入力データと式にあわせて近似式を計算してくれる。行列とか使うやつ。

gnuplot > fit a*x+b "test.dat" via a,b

とすれば入力データの前の式が入力データに近くなるようにa,bの値を作ってくれる。あとはこれを

gnuplot > plot a*x+b

してあげれば近似式がプロットできるというわけだ。

各種設定

plotは正直誰でもできるみたいなとこあるけれど、混乱するのが軸とかの設定の方だったりplotのオプションだったり。基本的にはsetの後ろにいろいろ単語をくっつけていくものが多い。無効にするときはunsetをつける。

入出力

入力

入力するには、ターミナルからコマンドを直接入力するか、ファイルをロードする必要がある。コマンドを書いたファイルをロードするときはまずコマンドを登録したファイル「plot.gp」を用意しておいて

# コメントアウトはハッシュで始めればOK
set terminal postscript eps
plot sin(x)
set terminal x11

これをgnuplotでロードする

gnuplot > load "plot.gp"

とすれば良い。

逆に、入力したコマンドを保存しておくなら

gnuplot > save "plot.gp"

としておけばそれまでに入力したコマンドを保存することができる。

出力

基本的に起動直後はplotすると新しくウィンドウが起動し、そこにグラフが描画される。gnuplotでは、この出力先をウィンドウからset terminalをすることで画像に変えることで出力することができる。ファイル名の指定はset output 'filename'で行う

gnuplot > set terminal png
gnuplot > set output 'test.png'
gnuplot > plot sin(x)

とすることでPNG形式で保存することができる。
ベクター画像であるEPS形式で保存したいときは

gnuplot > set terminal postscript eps
gnuplot > set output 'test.eps'

とすればOK。set terminal postscript eps enhanced colorとしてあげればカラーにもできる。また、set terminal postscript eps 28などと後ろに数字をつけると文字サイズが指定できる。

また元のウィンドウで表示するように戻したいときは Windowsなら

gnuplot > set terminal windows

Linuxなら

gnuplot > set terminal x11

としてやれば戻すことができる。

軸の設定

軸ラベル

まず知っておくと良い知識として、(基本的に)軸はx1,y1,x2,y2の4本(二次元の場合)ある。それぞれにラベルなどが設定できる。位置はこんな感じ。
f:id:mattyan1053:20181115153250p:plain

軸のスケール

デフォルトでは自動的にちょうどいい感じになるようにスケールが取られるが、任意に設定することもできる。

自動縮尺

gnuplot > set autoscale x
gnuplot > set autoscale y

手動縮尺

gnuplot > set xrange [0:20]
gnuplot > set yrange [0:40]
gnuplot > set x2range [-10:10]

と言った感じで各軸にスケールを設定できたりする。[a:b]のところは軸の値がaからbまでですよという意味。ちなみに現在どういう設定かはshow autoscaleで確認することができる。ちなみに対数スケールにするには

gnuplot > set logscale y

のような感じにすればOK。

軸ラベル

各軸のラベルは

gnuplot > set xlabel 'label 1'
gnuplot > set x2label 'label 2'
gnuplot > set ylabel 'label 3'

のようにして設定できる。

タイトル

グラフのタイトルをつけることもできる(とはいえTeXの機能などのほうでつけたほうが楽だと思うが・・・・・・)。

gnuplot > set title 'TITLE'

凡例

どのグラフが何を表しているかの説明。表示位置などを決めることができる。

gnuplot > set key inside
gnuplot > set key left top # 左上に表示

f:id:mattyan1053:20181115155607p:plain

内側に表示する場合はinsideに設定しておく。その後に位置を指定。上下左右と斜めの8方向指定できる。他に、座標で指定するほうほうもあるにはある。

gnuplot > set key at 5.0, 5.0

f:id:mattyan1053:20181115155622p:plain
外側に表示してみることもできる。下に表示する場合

gnuplot > set key bmargin
gnuplot > set key center

f:id:mattyan1053:20181115155632p:plain

その他

グラフにグリッド線をつけたいときは

gnuplot > set grid

終わりに

これだけあればだいたいの二次元グラフはかけそう。各種コマンドを組み合わせることになる。 基本的にはプロットのコマンドファイルを作っておいてロードするのがデータ更新したときなどやりやすい。サンプルを貼ってみる。

# gnuplot script file
# using grid
set grid

# key position
set key inside top left

# set label
set xlabel 'Phase'
set ylabel 'Amplitude'

# set axis
set xrange [0:6]
set yrange [0:60]

# set values
fit a*x "test.dat" via a

# output
set terminal png 20
set output 'test.png'
plot "test.dat" using 1:2 with points notitle, a*x with lines title "test"

# undo terminal setting
set terminal x11
$ gnuplot
gnuplot > load "test.gp"

f:id:mattyan1053:20181115161928p:plain
こんな感じのファイルを作っておくと良い。