理学部の学生がgnuplotの備忘録を書く
にまさかの続編が出ました。
gnuplotのコンソール使いにくすぎない?
WindowsでもWindows Terminalとかそういう快適なCUI環境が整いつつある今、gnuplotのコンソールはあまりにも使いにくすぎる。
カーソルの動きが怪しいし、日本語の表示も怪しい。キーボードショートカットも気に食わない。
スクリプトファイルにしよう
そもそもgnuplotでグラフを作るまでのコマンド群は大体がお決まりのもので使い回すのだから、スクリプトファイルにするのに向いている。
UTF-8で書くには
まずスクリプトファイルのエンコードはUTF-8にしたい。いい加減Shift-JISからはお別れしたいし。
そのためにはスクリプトファイルの冒頭で
set encoding utf8
としておく。Windows環境では必須となる。
ターミナルとフォントの選択
UTF-8にしたからには絵文字とかも使えるナウでヤングな環境がほしい。
スクリプトファイルを呼び出す前に
set terminal windows 0 color solid butt enhanced font "HackGen"
とした。フォントにはHackGenを採用した。
適当にプロットしたときに開くプロット画面のOptions
でDirect2D backend
を選ぶ。GDIなんていうカビの生えた方法は捨て去るべきだし、そもそも原理的に絵文字に対応できない。残念なお知らせとしては、このbackend選択はどうもwgnuplot.ini
に反映されないらしく、wgnuplot.exe
起動ごとに設定し直す必要がある。gnuplot 5.4とかそのへんでは治っていることを期待したい。
下にGDI+ backend
を選んだ時の様子を示す。絵文字に対応できていない。
下にDirect2D backend
を選んだ時の様子を示す。モノクロながら絵文字に対応できている。将来のgnuplotでカラーも対応していることを期待したい。
ただし古いgnuplot(手元にgnuplot 5.1 patch 0があった)ではそのオプションがない。
うっかりwxtをバックエンドに使って絵文字を表示させようものなら盛大にバグる。つまりwxtはもはや死んだ。
現在Windows環境で動くgnuplotのバイナリを手に入れる方法
新規に入手するかと思ってダウンロードサイトに行くと
http://tmacchant3.starfree.jp/gnuplot/Eng/winbin/
リンク切れで落とせない。これではどうもならない。
msys2で
$ pacman -S mingw-w64-x86_64-gnuplot
するのがよい。ただしmsys2のbash上からwgnuplot
を呼び出すと端末が中途半端にUTF-8に毒されて、日本語パスへの移動すらままならなくなるので、/mingw64/bin
のパスをエクスプローラーで開いてダブルクリックで起動するべきである。
また、上下キーで過去のコマンドをたどる機能はどういうわけか動かないので毎回コピペすることで対応する必要がある。
あとwxtを使おうとするとコケる
というわけでスクリプトファイルを書いてみた
set encoding utf8
set xlabel "位置 [mm]"
set ylabel "波長 [nm]"
set xrange [0:200]
set yrange [0:1000]
# λ=xd/√(l^2+x^2 )
f(x)=(x/(1000*sqrt(215*215+x*x)))*1000000
g(x)=a*x+b
fit g(x) 'lambda-x_plot.txt' via a, b
plot f(x) lt 1 lc rgb '#000000' title "lambda"
replot g(x) lt 1 dt(10, 5) lc rgb '#000000' title sprintf("%fx+%f", a, b)
replot 'lambda-x_plot.txt' lt 1 lc rgb '#111111' pt 6
$$ \lambda = \frac {xd}{\sqrt{l^2 + x^2}} $$
のようなやや複雑な式でもf(x)=(x/(1000*sqrt(215*215+x*x)))*1000000
のように(単位変換が入っていることに注意、$l=215, d=1.0 \times 10^{-3}$は既知のパラメータ)して扱える。
plotするデータも用意する
104 435.8
121 491.6
140 546.1
152 578
157 589
そしたら
load 'gnuplot_cmd_list.plt'
これでプロットできる。