Gnuplotでプロットしたい
無限のポテンシャルを持つGnuplotですが,いちいち検索してはsetするのが無限に面倒くさいです。
Gnuplotで測定データをプロットするのに苦労点が多々あったので,その解決方法をここにまとめておきます。
目次
参考になったサイト
gnuplotの初歩
あらきだのメモ箱 - gnuplot の pm3d
タイトル未定: Gnuplot
gnuplotのfit関数を使ったフィッティング~その1~ - Qiita
gnuplot / plot3d (1)
Gnuplotをインストールしたい
そのままHomebrewからインストールすると,出力先が行方不明になり怒られるので,以下のようにします。
出力先をX11にしたい
出力先として,グラフをぐりぐり弄ることができるX11も一緒にインストールするときは
$ brew install gnuplot --with-x11
これでX11でインスタントにプロットしたグラフを見たり,視点をぐりぐり弄られます。
出力先をAquaTermにしたい
アンチエイリアスがかかった綺麗なグラフがいい人はAquaTermも一緒にインストールすると幸せになれます。
$ brew install gnuplot --with-aquaterm
Gnuplotで関数をプロットしたい
2次元の関数をプロットしたい
sinc関数を2次元でプロットしてみます。sinc(x)とすると怒られるのでsin(x)/xとします。
gnuplot> plot sin(x)/x
それっぽい出力がされました。
3次元の関数をプロットしたい
3次元でプロットしてみます。sinc関数も3次元のものを使います。
gnuplot> splot sin(sqrt(x**2+y**2))/sqrt(x**2+y**2)
一応3次元の曲面(っぽいもの)が出力されましたが,このままでは見づらいです。線をいい感じに増やしていい感じにします。いい感じにならないときはisosamplesの値をいい感じに変えましょう。
gnuplot> set isosamples 50 gnuplot> splot sin(sqrt(x**2+y**2))/sqrt(x**2+y**2)
これでようやくそれっぽい曲面をゲットできました。
z軸原点とxy平面をくっつけたい
普通にsplotするとgnuplotはz軸の最下点がxy平面から離れたグラフを出力します。 これを改善するには次のおまじないをすればokです。
gnuplot> set ticslevel 0
こちらのほうが自然なグラフに見えます。
グラフの軸の設定を変えたい
デフォルトの設定では,とてもナイスとは言えないグラフが出来上がるので色々変えます。
軸にラベルを付けたい
x, y, z軸にラベルを付けるときは以下のようにするとラベリングできます。
gnuplot> set xlabel "x-axis name" gnuplot> set ylabel "y-axis name" gnuplot> set zlabel "z-axis name"
しかしz軸のラベルが軸の目盛りを邪魔してしまうようです。
グラフのラベルを回転させたい
z軸のラベルを回転させたいときは以下のようにすると良いようです。
gnuplot> set zlabel rotate by 90
x, y軸のラベルも同様ですが,実質z軸のラベルを90deg回転する以外の用途が無いような気がします。
要らない上と右の軸と目盛りを消したい
二次元のxy座標でグラフを作った時,デフォルトでは上と右にも軸と目盛りが作成されてしまいます。ナイスではないす。 というわけで消してしまいます。 まず右と上の軸を消します。おまじない。
gnuplot> set border 3
しかし,これだけでは軸は消えても目盛りは残っています。目盛りが邪魔なので消します。
gnuplot> set xtics nomirror gnuplot> set ytics nomirror
はい,完成です。
コンター図(等高線)をつくりたい
コンター図を作るときは,pm3dを使います。
gnuplot> splot sin(sqrt(x**2+y**2))/sqrt(x**2+y**2) with pm3d
これでzの値の大きさによって色分けされたコンター図が出力されます。
コンター図の配色を変えたい
グレースケールにしたい場合は
gnuplot> set palette gray
虹色にしたい場合は
gnuplot> set palette rgbformula 22,13,-31
とします。数値を弄れば色も変わります。
ファイルを読み込んでプロットしたい
ファイルから3次元にプロットする際は,
gnuplot> splot "filename"
とすることでプロットができます。
点面でプロットしたい
データから,点を用いて曲面を描きたいときは次のようにすれば良いです。
gnuplot> splot "filename" with points
pt, lcのオプションの数値を変化させることで,グラフの印象が変わります。 ptは点の種類,lcは点の色です。
gnuplot> splot "filename" with points pt 7 lc 4
好み,グラフの種類によって変えられるとナイスです。
カンマ区切りのファイルでプロットしたい
Gnuplotがファイルを読むとき,デフォルトでは空白を区切りとして読むみたいです。
CSVファイルなどのカンマ区切りのファイルでプロットしたいときは
gnuplot> set datafile separator ","
とおまじないをして,カンマを区切り子としてsetすることで読み込めるようにします。 例えば3次元XYZ座標の点をプロットしたいとき,ファイルは
#filename.csv #comment #X, Y, Z 0, 1, 2 3, 4, 5 6, 7, 8
のように書いておけば良いです。#をつけるとその行はコメントとして扱われます。
pm3dで謎のエラーが出るのを解決したい
pm3dでプロットしようとすると,
Warning: Single isoline (scan) is not enough for a pm3d plot. Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
というエラーが出ることがあります。これは自分の場合,
#data #X, Y, Z 0, 1, 2 0, 2, 4 0, 3, 6 0, 4, 8 1, 1, 1 1, 2, 2 1, 3, 3 1, 4, 4
のような,1カラム目に同じ数値が連続して入っているファイルをプロットしようとする時に起こりました。
これは,次のように1カラム目の数値の変わり目に改行を入れることで解決できます。
#data #X, Y, Z 0, 1, 2 0, 2, 4 0, 3, 6 0, 4, 8 1, 1, 1 1, 2, 2 1, 3, 3 1, 4, 4