2010年5月17日

gnuplot

來自http://gtchen.pixnet.net/blog/trackback/f96316f306/5873441
=================
(20090611更新)
Gnuplot homepage:
http://www.gnuplot.info/
download:  http://sourceforge.net/project/showfiles.php?group_id=2055
同 時也有使用手冊(英文)可以下載
主程式的壓縮檔中有一些教學文件檔

另有中文的簡介,但是是較早的來源http://phi.sinica.edu.tw/aspac/reports/95/95006/
還 有一個非常好用的網頁(gnuplot-tips):http://t16web.lanl.gov/Kawano/gnuplot/index-e.html
裡面有一些設定的教學並附圖   相當好用
官網上有一些demo  http://www.gnuplot.info/demo/
另 有網頁有介紹  http://www.duke.edu/~hpgavin/gnuplot.html

注 意:Windows 4.2版要存成.ps時 需要gnuplot\bin\share\PostScript\prologue 這個檔案存在
         4.0版則不需要

以下列一些我常用的指令與方法:(綠色表示下的指令)

    * 畫圖
           a. 從檔案: 
                        plot "abc.txt" using 1:2 with linespoints title "xy1"

                        以abc.txt檔案中 第一行為X軸  第二行為Y軸  畫出來
                        並把資料的點標出來且連線
                        曲線的標題為xy1
                        replot "abc.txt" using 1:3 with lines title "xy2"
                        以abc.txt檔案中 第一行為X軸  第三行為Y軸  畫出來
                        並把資料的點連線
                        曲線的標題為xy2
            b.從軟體本身內建的函數: plot sin(x)
            c.從自設的函數:    f(x)=1+2.2*x+3.3*x**2; plot f(x)
                               設定函數f(x)並畫出來

    * 存檔步驟
                a.plot "abc.txt" using 1:2 with linespoints titile "xyz"
                b.set terminal postscript color <---設定為ps格式(彩色)輸出
                c.set output "abc.ps"  <----設定輸出檔名為abc.ps
                d.replot <--- 再畫一次 
                  如此存檔就完成了    或是可以直接b->c->a     這種步驟也行

    *   一些指令的縮 寫:
                1.using-->u                        2.title-->ti                    3.terminal-->term
                4.output-->out                   5.linespoints-->lp                 6.lines-->l
                7.points-->p                       8.with-->w                           9.linestyle-->ls
              10.linetype-->lt                  11.linewidth-->lw                  12.pointtype-->pt
              13.pointsize-->ps              14.logscale-->log                   15.xrange -->xr

              16.enhanced-->enh          17.postscript-->post               18.xerror-->xe
              19.replot-->rep                 20.autoscale-->auto               21.tmargin-->tmar
              22.textcolor-->tc               23.label-->la

    * 一些設定說明:
  • set logscale {x,y}:設定 X或Y軸或是兩者為logscale    取消:unset logscale
  • set xrange [a:b] 設定X軸範圍從a到b(Y軸亦可);若是看不到圖形,可用set autoscale 自動調回
  • set xlabel "XXX", a,b: 設定X軸的名稱為 XXX (Y軸亦同), 從預設向右移動a,向上移動b
  • set xlabel "XX" font "Times-Italic,26":設定X軸的名稱為XX,以Times-Italic字型大小26顯示
  • set xlabel "XX" font "Times-Roman,24":設定X軸的名稱為XX,以Times-Roman字型顯示
  • set xlabel "XX" textcolor lt 4: 以linetype 4 顯示XX
  • set title "GGG": 設定圖形標題為GGG
  • set xtics a: 設定顯示的X軸座標與刻度, 每次增加 a ;在logscale時,預設的設定會沒有小刻度
  • set xtics a,b: 設定顯示的X軸座標與刻度 起始值a,每次增加b
  • set mxtics a: 顯示X座標軸上的小刻度,每個大刻度間隔除以a的大小顯示一次
  • set xtics (a,b,c): 設定顯示的X軸座標a ,b ,c 與刻度(Y軸亦同)
  • set format y "10^{%L}":Y 軸的值以10的L次方顯示
  • set format x "%a.bf": X軸的值以總長a位數,小數點以下b位顯示
  • set format x "%a.be": 以科學記號顯示
  • set format x "%g":預設顯 示
  • set format x "":不顯示X軸 的座標值
  • set key Q,W Left reverse: 將圖示與曲線標題倒過來放在圖上座標(Q,W)處,ex:  xy1 +++ ---> +++ xy1
  • set key spacing D:設定圖 示間的寬度增加D倍
  • set key title "XXX":設 定圖示的名稱
  • set label "SSS" at Q,W: 設定SSS這三個字出現在座標(Q,W)處  (網頁上的demo有例子)
  • set label "XX" textcolor lt 2: 以linetype 2 顯示XX
  • set arrow from a,b to c,d: 從座標(a,b)畫個箭頭到(c,d),編號第一條箭頭 (可用lw,ls改樣式)
  • set noarrow 1:除去第一號箭頭
  • set arrow from a,b to c,d nohead:畫沒箭頭的箭頭  (疑?那是啥?就是線啦)
  • set term postscript (eps) enhanced color:嵌入一些文字外掛並設定輸出為ps或eps 
               特殊文字的表示法可以在下載的gnuplot程式中找到教學文件或是見PS1        
  • set label "{/Symbol n}={/Italic l}" at Q,W font "Times-Roman,24"
  • set grid: 在各主要刻度畫出格子
  • set grid xtics ytics mxtics mytics:在各刻度畫出格子
  • set grid noxtics x2tics: 以上邊的X軸刻度畫出格子(參考實例2)
  • load "FFF.txt": 載入FFF.txt 中的指令,這是相當好用的畫圖方法,畫錯了只要改檔案重畫就行
            PS: 檔案中若是有 # 符號   那這一列就不會被讀取
  • X@^2_{A} : 同時設定某一符號的上下標
  • set datafile missing "Nan": 不要讀(畫)出字串Nan

    *  實例1:把兩張圖上下疊在一起
       以下為指令:
        set term post eps enh color
        set out "test.ps"
        set multiplot                                      <--進入multiplot模式
        set key 0.5,1 Left reverse                 <--設定圖示座標為(0.5,1)並倒過來
        set key spacing 2
        #Figure 1                                          <--#之後不會被讀取  可以用來寫說明
        set xrange [-1:1]
        set yrange [-1:3]
        set xtics (-1,-0.75,-0.5,0.25,0,0.5,1)  <--設定要顯示的X軸座標
        set ytics (-1,-0.5,0,0.5,1,1.5,2,2.5)
        set tmar 0                  <--因為要把第二張圖貼在第一張上緣,所以上面邊界設為0,但是只有這樣作的話,下面那張會比小,因為下面那張的的座標部份也算在邊界界內,所以最好的方法是將所有的邊界都設為0
        set bmar 0               
        set rmar 0                  
        set lmar 0 

        set size 0.7, 0.5         <--設定圖的大小:X軸變為0.7倍  Y軸變0.5倍 (縮小比例可讓圖示標題看起來變大)
        set origin 0.1, 0.0   <-- 設定圖的原點 0.1,0 (不是圖上的座標而是整個圖的座標),若沒有引入eps功能 邊界可能會被切掉,所以原點稍微向右移
        set title "test1" 0,-4 font "Times-Roman,30" <--圖形標題為test1 由原來位置移動(0,-4)到新位置 (0,-4不是圖上座標,是相對原始位置的座標)
        set xla "{/Symbol F^a}" font "Times-Italic,25" 
        set yla "{/Symbol S}" font "Times-Roman,25"    <--設定一些符號並改變字型與大小
        plot "abc.txt" u 1:2 w lp ti "{/Symbol n_1}" pt 5   <--以abc.txt檔案中,第一行為X軸,第二行為Y軸畫出來,並把資料的點標出來且連線,點的形式是第五種 ,曲線的標題為{/Symbol n_1}
        rep "abc.txt" u 1:3 w lp ti "{/Symbol b_2}" pt 7
        #Figure 2
        set size 0.7, 0.5                                   <--size 要跟第一張圖一樣才會和稱
        set origin 0.1, 0.5                                <--第二張的原點 因為要貼在第一張的上面  所以要跟第一張的設定配合
        set bmar 0                                           <--下緣邊界設為0
        set format x ""                                     <--X軸沒有座標顯示
        set ytics (-1,0,0.5,1,2,2.5,3)
        set xla ""                                              <--X軸沒有名稱
        set yla "{/Symbol S}" font "Times-Roman,25"
        set title "test2" 0,-4 font "Times-Roman,30"
        plot "abc.txt" u 1:2 w lp ti "{/Symbol n_1}" pt 6
        rep "abc.txt" usi 1:4 w lp ti "{/Symbol b_2_3}"  pt 8

        rep "abc.txt" w l lt 1 lc rgb "blue" lw 7  <-- linetype=1, linewidth=7,linecolor=blue(4.2版以後)
        set nomultiplot                                      <--離開multiplot模式


    *實例2:兩個不同Y值的座標軸在同一張圖(參考 gnuplot-tips)

      set xr [0:2*pi]       
      set yr [-1:1]            <--左邊Y軸範圍
      set y2range [0:1]           <--右邊Y軸範圍
      plot sin(x)    axis x1y1, \  
             sin(x)**2 axis x1y2  <--畫sin(x)以左邊Y軸當基準,畫sin(x)平方以右邊Y軸當基準
      set ytics nomirror          <--設定左邊Y的刻度不要鏡射到右邊軸      
      set y2tics 0, 0.2            <--設定Y2的顯示值與刻度       
    * 有關含Error bars的作圖
      http://t16web.lanl.gov/Kawano/gnuplot/datafile-e.html#2dim
      http://gnuplot.sourceforge.net/demo/mgr.html      上面兩個網頁有一些例子與說明
      The number of data column required for data plotting depend on a kind of figure, which is summarized below

Data Format Columnusing with
(X,Y) data X Y 1:2 lines, points, steps,
linespoints, boxes, etc.
Y has an error of dY X Y dY 1:2:3 yerrorbars
X has an error of dX X Y dX 1:2:3 xerrorbars
Y has an error of dY, and
X has an error of dX
X Y dX dY 1:2:3:4 xyerrorbars
Y has a range of [Y1,Y2] X Y Y1 Y2 1:2:3:4 yerrorbars
X has a range of [X1,X2] X Y X1 X2 1:2:3:4 xerrorbars
Y has a range of [Y1,Y2], and
X has a range of [X1,X2]
X Y X1 X2 Y1 Y2 1:2:3:4:5:6 xyerrorbars
   例子:
      plot "abc.txt" usi 1:2:3:4 with yerrorbars              <---第三跟第四行是Y軸上面與下面的數據點值
      plot "abc.txt" usi 1:2:($2+$3):($2-$4) with error <---第三跟第四行是Y軸誤差的上下量         
                                                                                                    ps:  origin作圖只接受誤差量
      plot "abc.txt" usi 1:2:3 with error                           <---Y軸只有一種誤差量

    *  使用Gnuplot來fitting:
       http://www.duke.edu/~hpgavin/gnuplot.html
       參考上述網頁即可 以下是主要的指令
        f1(x) = a1*tanh(x/b1)            <--定義要用來fitting的函數與參數
       a1 = 300; b1 = 0.005;            <--猜的a1與b1初始值
        fit f1(x) 'force.dat' using 1:2 via a1, b1  <--fitting      

PS1:特殊符號表:
ALPHABET SYMBOL ALPHABET SYMBOL alphabet symbol alphabet symbol
A Alpha N Nu a alpha n nu
B Beta O Omicron b beta o omicron
C Chi P Pi c chi p pi
D Delta Q Theta d delta q theta
E Epsilon R Rho e epsilon r rho
F Phi S Sigma f phi s sigma
G Gamma T Tau g gamma t tau
H Eta U Upsilon h eta u upsilon
I iota W Omega i iota w omega
K Kappa X Xi k kappa x xi
L Lambda Y Psi l lambda y psi
M Mu Z Zeta m mu z zeta
PS2:各種線與點的顏色跟大小  (下次再補)

沒有留言: