• 追加された行はこの色です。
  • 削除された行はこの色です。
  • gnuplot は削除されています。
  • gnuplot の差分を削除

*目次 [#d7115537]
#contents

*概要 [#sb3a0ee6]
-Gnuplotの仕様上の欠陥とバグをすり抜けて、目的の動作をさせる方法



*出力 [#o65b444f]
**eps(論文用) [#c11decdd]
 set xrange [0:400]
 p "bla" u 1:4 w l
 rep "eigen" u 1:4 w l
 set terminal postscript eps enhanced color
 set output "out.eps" 
 replot

**png [#g3ea94f0]

 set xrange [0:400]
 p "bla" u 1:4 w l
 rep "eigen" u 1:4 w l
 set terminal png
 set output 'sinc.png'

*点を打つ [#if1cb850]

 set label 1 point pt 7 ps 3 lc rgb "dark-violet" at 0,0,800

*ヒートマップ [#haba1451]
-[[参考>http://www.natural-science.or.jp/article/20091028205740.php]]

 set pm3d 
 set pm3d map
 set ticslevel 0
 set cbrange[-1:1]
 set palette defined (-1 "blue", 0 "white", 1 "red")
 splot "data" with pm3d




-dataは以下のような形式になっている必要がある。

 1 1 0.33
 1 2 0.457
 1 3 0.45
 
 2 1 0.33
 2 2 0.457
 2 3 0.45
 
 3 1 0.33
 3 2 0.457
 3 3 0.45

*gnuplot自動化 [#gba14913]

**バッチモードとインタラクティブモード [#r0711396]
-ttyデバイスが標準入力に割り当てられているときはインタラクティブモード、そうでない場合はインタラクティブモードで起動する。
-シェルを起動してgnuplotと打つとキーボードがあるのでインタラクティブモード、パイプやなどで流し込むとバッチモードで起動する。

-外部から起動する場合は↓のようにする(そうしないと一瞬で終了する)。''pause -1はバグバグしいので使ってはならない''

 gnuplot -persist < file
 gnuplot -persist << EOF
   p 'a.txt'
 EOF


**共通ファイル [#o828a13f]
-a.txt
 1
 2
 3
 4
 5
-b.txt
 6
 7
 8
 9
 10

**コマンド群のバッチ実行 [#h410e858]
-gnuplot test.gplとしても、gnuplot test.gplとしても、test.gplのEOFを検知した時点でgnuplotは終了する。
--我々が観測できるのは「gnuplotを起動して描画が終わった瞬間に終了して全くグラフが見えない」という状態。これを防ぐために-persistが必要。
-pause -1は、「インタラクティブモードの時はそこで処理を止め、バッチモードの時はスルーする」という謎コマンド。
--めんどいので使ってはならない。
***ファイルによる実行(リダイレクト) [#h00e0d1d]
-test.gpl
 plot 'a.txt' u 1
-起動
 gnuplot -persist < test.gpl #リダイレクトをしないファイルによる実行は不可!

***EOFによる実行 [#mf0cb219]
 gnuplot -persist << EOF
 plot 'a.txt' u 1
 EOF 


**描画すべきファイル名をシェルスクリプトの引数で指定する [#ca4175f0]
-プロットするファイルを変えたい場合はsedなり何なりで、ファイルを作ってからでないとプロットできない。
***シェルスクリプトに全部突っ込む [#k65578d2]
-test.sh
 gnuplot -persist EOF
 plot '$1' u 1
 EOF
-起動方法
 ./test.sh a.txt
 ./test.sh b.txt

***sedで置換 [#qa6af075]
-test.gpl.templete
 plot 'FILENAMETOCHANGE' u 1
-test.sh
 sed 's/FILENAMETOCHANGE/$1/g' test.gpl
 gnuplot -persist test.gpl
-起動方法
 ./test.sh a.txt
 ./test.sh b.txt

**複数グラフ表示 [#ic0f0c85]
-gnuplotで一度に複数のグラフを表示し、その全てに関してマウスからの操作ができるようにしたい。
-set termで複数の表示しても、その全てでインタラクティブな操作ができるようにするには、仮想ターミナルを作るしかない。xtermをバックグラウンドで起動することで実現できる。
***方法 [#g9878d36]
-plot_a.gpl
 plot 'a.txt' u 1
-plot_b.gpl
 plot 'b.txt' u 1
-plot_multi.sh
 xterm -e gnuplot -persist plot_a.gpl &amp;
 xterm -e gnuplot -persist plot_b.gpl &amp;
-起動方法
 ./plot_multi.sh

*Cからgnuplot操作 [#b0547163]
-パイプでつなげるだけ。
 #include <stdio.h>
 
 int main(void)
 {  
   FILE *gp = popen('gnuplot -persist', 'w');
   fprintf(gp, 'set parametric\n');
   fprintf(gp, 'set size square\n');
   fprintf(gp, 'set xrange [-1:1]\n');
   fprintf(gp, 'set yrange [-1:1]\n');
   fprintf(gp, 'plot [0:2*pi] cos(t),sin(t)\n');
   pclose(gp);
 
   return 0;
 }  

*最小二乗法 [#f207fcea]
**二次方程式 [#geedb9f8]
-ノイズありのy=x*xのデータに、y=0.5*x*x+0*x+0を初期値として最適化

 seq 10 | awk '{printf("%d %f\n", $0, $0 * $0 + rand());}' > data
 cat data
 
 gnuplot

 f(x)=a*x*x+b*x+c
 a=0.5;b=0;c=0;
 plot f(x), 'data' using 1:2 # not fitted yet
 fit f(x) 'data' u 1:2 via a,b,c
 plot f(x), 'data' using 1:2 # fitted!

**指数関数 [#ra97166c]
-モータがエンコーダ速度0から飽和まで加速した場合

 f(x)=a*(1-exp(-b*x)) # ''x=0での傾きはab、x=infでの速度はa、bは系に固有''
 a=20.0;b=2.0;
 fit f(x) './0.6-5step-vel' u ($0/40):1 via a,b # /40は、25ms周期のサンプリングだから
 plot f(x), './0.6-5step-vel' using ($0/40):1

**多変数関数 [#mdc83029]
-ファイルaの1列目2列目がx, yで、3列目がg(x, y)であるようなデータが与えられた時、以下のようにすれば多変数関数の最小二乗法ができる

 g(x,y)=a*x+b*y+c+d*x*y+e*x*x+f*y*y
 fit g(x,y) 'a' using 1:2:3:(1) via a,b,c,d,e,f
 sp g(x, y)
 rep 'a'


*plotの中にコマンドを突っ込む [#o7004246]
-plot "<command"とすると、plotするデータ群を選択したり、ファイルを連結したりできる。
--plot '<command'では動かない。
--"<"内部に“ダブルクオーテーションは使えない??エスケープする方法がわからない。

 plot "<awk '$7 > 2.2049*$5-210.4416 {print}' mani" u 5:8
 plot "<paste file1 file2 | awk '$1 > 2.0 {print}'

*multiplot [#j57bfd84]
 set multiplot layout 2,1  #multiplotの開始、縦2横1自動配置
 set xrange [1950:2150]
 set yrange [500:1500]
 p "a" u 2 w l
 set yrange [-1.1:1.1]
 p "a" u 3 w l

**multiplotでreplot [#a2548f52]
-replotコマンドは使えない.([[参考>http://coffee.guhaw.com/Entry/242/]])


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS