gnuplotに関するメモ

 gnuplot の基本操作をまとめておく。
     2004-11-04(木), 2005-06-02 小修正
          2006-07-05 インストール方法を追加
          2006-10-12 dumb ターミナルを追加
          2006-12-22 最小自乗フィット、表示ポイント数の変更、を追加
          2008-08-29 二項分布の表示例を追加
          2009-07-03 二項分布の表示例出の問題点を追加。
           画像ファイルへの吐き出しを追加
           処理の自動化を追加
     2009-10-29 線の太さや色変更方法を追記
     2022-03-02 学校指定ノートPC上のLinuxの場合について追記修正
     2023-11-20 使用可能な関数を追記

--------------------------------------------------------
gnuplot のインストールの仕方。
(2006年秋以降の実習室デスクトップPCや学生ノートPCのLinuxには既にインストール
されているので以下の[1][2-a][2-b]操作は不要。
ただし gateway.edu.tuis.ac.jp にはインストールされてないかもしれない)

[1] ソースからインストールする場合
 ダウンロード
 学内にいるなら ftp://www.infosys.tuis.ac.jp/pub/gnuplot/
 学外にいるなら ftp://ftp.gnuplot.info/pub/gnuplot/
 にアクセスし、gnuplot-4.0.0.tar.gz をダウンロード

 インストール(自分のマシンならば)
 su でrootになったあと
 # tar xvfz gnuplot-4.0.0.tar.gz
  # cd gnuplot-4.0.0
  # ./configure && make && make install
  # cd ..
  # rm -rf gnuplot-4.0.0
  # rm -f gnuplot-4.0.0.tar.gz  

[2-a] Vine Linux にインストールする場合
 su - でrootになったあと
 # apt-get update && apt-get -f install && apt-get install gnuplot

[2-b]  CentOS にインストールする場合
 su - でrootになったあと
 # # yum -y check-update && yum -y install gnuplot

[3] 起動
 単に gnuplot と入力
   $ gnuplot

  もし、[2-b]のようにホームディレクトリ内にインストールしたのであれば
    $ ~/gnuplot/bin/gnuplot 

--------------------------------------------------------
$ gnuplot
で起動
> quit
で終了。

--------------------------------------------------------
点データを読み込んでプロット(描画)する

例:
> plot "mono-k.dat"
 でファイル mono-k.dat から
   .89999998E+00  -.60864986E+02
   .94999999E+00  -.60449627E+02
   .10000000E+01  -.60014309E+02
   .10500000E+01  -.59559414E+02
   .11000000E+01  -.59085335E+02
    .....         ......
のような二次元データを読み込んでプロット(data style は.gnuplot で記述されて
いる)
data style を明示するには
> plot "mono-k.dat" with {lines, points, dots} のように書く。
> plot "mono-k.dat" w {l, p, d}
のように省略して書くことも可能。
複数の数値データをひとつのグラフにプロットするときは
> plot "mono-k.dat" w l,"poly-k.dat"w p
などのようにする。

--------------------------------------------------------
データを生成するときは、gnuplotだけではなくngraphを使う可能性も考慮して
     # particle positions
     .89999998E+00  -.60864986E+02
     .94999999E+00  -.60449627E+02
     .....         ......
のようにコメント行は行頭に"#"を書き、数値区切りは半角スペース" " で生成する。

--------------------------------------------------------
関数形を知っていてそのグラフを描く場合は
> plot [xの範囲] [yの範囲] [関数式] 
と書く。例:
> plot [0:2] x**2
複数の関数を描くときは
> plot [0:5][0:2.5] x**0.5+sin(x) w l, -0.466*x**2+1.88*x+0.427 w d
のように , で区切る。

--------------------------------------------------------
gnuplotで対数グラフを描く方法
> set logscale x         x 軸を 対数スケールにする。1,10,100 の目盛になる
> set logscale y         y 軸を 対数スケールにする。1,10,100 の目盛になる

> set logscale xy 2      x軸y軸両方を対数スケールにして、2,4,8,16 の目盛にする。

> set format y "10^{%L}"     y軸を対数スケールにして、1,10,100 ではなく、
                             10^{0], 10^{1}, 10^{2} という目盛にする。

対数スケールをデフォルトスケールに戻すには。
> set nologscale
 あるいは
> unset logscale

--------------------------------------------------------
3次元グラフをプロットする
・関数形がわかっている時
 > splot [xの範囲] [yの範囲] [関数式] 

 例:> splot x**2+y**2
 例:> splot [-2:2][-2:2] exp(-(x**2+y**2))

  

・データからプロットする時
 以下のようなデータを用意しておく
   #3-dim data x y z
      -1.002 -21.986 3.36
      -1.003 -20.097 3.65
      ....   ....    ....

  > splot "3-dim.dat"

--------------------------------------------------------
内容が
 set term vttek
 set data style lines
である .gnuplot というファイルをホームディレクトリーに作っておくと便利。

TeratermProなどを使ってWindowsからUnixマシンに接続し、そこでgnuplotでグラフ表示
したいときはTeratermProのメニュー内の setup の中に Auto switch (VT<->VTTEK) 
という項目があるのでチェックを入れる。Unix側では .gnuplotに set term vttek と
書いておく。すると リモートのUnix上で
> plot [0:2] x**2 
などとすると、ローカル側のWindowsでVTTEKが起動してグラフが表示される。
  

  

--------------------------------------------------------
もし X-term や vttek などのグラフィカルなターミナルを使用不能の場合でも
> set term dumb
としておくと、キャラクタ端末でグラフの雰囲気を掴むことができる。
  

--------------------------------------------------------
最小自乗法でフィット関数を求めることもできる。

以下は data.txt から最小自乗法で 直線フィットするやり方。(図は省略)

gnuplot> f(x)=a*x+b
gnuplot> fit f(x) 'data.txt' via a,b
[表示される内容は省略。とにかくa,bの値が出ると同時にそれがa,bに代入される]
gnuplot> plot f(x),'data.txt'

--------------------------------------------------------
表示ポイントの数の変更

関数を表示する際、gnuplotが勝手に等間隔でプロットしてくれるが、変動の激しい
関数をプロットする場合など、その間隔が荒いと感じるならば以下のように手動で
設定せよ。
gnuplot> set sample 1000     <==プロット点数を1000個に設定

設定をデフォルトに戻す時は
gnuplot> unset sample

その他の例:
gnuplot> set sample 21
gnuplot> plot [0:20] (20!/(int(x)!*(20-int(x))!))*0.3**x*0.7**(20-int(x)) w l

応用:二項分布の表示例
 (gnuplotでは1000の階乗などは計算できないので、以下の例では100の階乗に留めている
  ことに注意せよ!)
 (gnuplotのn!の近似計算はなんか少しおかしいので、Stirlingなどで近似して数値計算
  させた値とごくわずか異なることに注意せよ)
gnuplot> set sample 101
gnuplot> n=100
gnuplot> p=0.080808
gnuplot> plot [0:100] (n!/(int(x)!*(n-int(x))!))*p**x*(1.0-p)**(n-int(x)) w l
  

--------------------------------------------------------
グラフを画像ファイルに出力する

普通に表示して確認したあと
gnuplot> set term png
gnuplot> set output "hoge.png"
その後普通にプロットすると hoge.png に出力されるので $ eog hoge.png などで見て確認せよ。

--------------------------------------------------------
処理を自動化する

以下のような内容のスクリプトを作り、実行権を与えて実行する。

画像ファイル"uhoho.png" を作る場合。
#!/usr/bin/gnuplot -persist
set term png
set output "uhoho.png"
plot [0:30] [0:100] "ahoho.dat" w l, "ahoho.dat" w p

普通のgnuplot のグラフウィンドウで表示する場合
#!/usr/bin/gnuplot -persist
set term x11
plot [0:30] [0:100] "ahoho.dat" w l, "ahoho.dat" w p

--------------------------------------------------------
線の色や太さを変える(X11のみ。vttekでは色変更は線種変更になる)

・色変更
 linetype (lt)
     1: 赤 2: 黄緑 3: 青 4: ピンク 5: 水色 6: 黄色 7: 黒 8: オレンジ 9: 灰色
   (ターミナルによっては -1 が黒の場合もあるようだ)

・太さ変更
 linewidth (lw)
   数値を書く。デフォルトは1

使用例:普通の二倍の線の太さで、黒い線を描きたいとき。
gnuplot> plot sin(x) lw 2 lt 8

--------------------------------------------------------
plotする領域はデフォルトで横長長方形だが、これを正方形にしたいときは
set size square をやればよい。

gnuplot> set size square
gnuplot> plot [0:10] exp(-0.5*x)*cos(4*x)
  

--------------------------------------------------------
gnuplotで使える関数
 exp(x)   指数関数
 log(x)   自然対数
 log10(x) 常用対数
 sin(x)   正弦関数
 cos(x)   余弦関数
 tan(x)   正接関数
 asin(x)  逆正弦関数
 acos(x)  逆余弦関数
 atan(x)  逆正接関数

xの二乗などは、 x^2 ではなく x**2 と書かなくてはならないことに注意!

xの平方根は、sqrt(x)

--------------------------------------------------------

gnuplotに関する便利なHP
http://art.aees.kyushu-u.ac.jp/members/kawano/gnuplot/index.html
2005-06-02時点で確認したら消えてたので、以下のページを参照せよ。
http://ayapin.film.s.dendai.ac.jp/~matuda/Gnuplot/gnuplot.html
http://www.edu.ics.saitama-u.ac.jp/~eduics/lect/gairon/gnuplot/basics.html
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/gnuplot-intro/

http://t16web.lanl.gov/Kawano/gnuplot/index.html  <==超Cooool!

*****************************************************************************