(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://lowrank.net/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軸<using 1:2> 畫出來
並把資料的點標出來且連線<linespoints>
曲線的標題為xy1<title "xy1">
replot "abc.txt" using 1:3 with lines title "xy2"
以abc.txt檔案中 第一行為X軸 第三行為Y軸<using 1:3> 畫出來
並把資料的點連線<lines>
曲線的標題為xy2 <title "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
- plot "data" u 1:(log($4)): 畫data檔案中的第1行為x,第4行取log值為y
* 實例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軸<u 1:2>畫出來,並把資料的點標出來且連線<lp>,點的形式是第五種 <pt 5>,曲線的標題為{/Symbol n_1} <ti "{/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)
<span style="color: #339966;">set xr [0:2*pi] set yr [-1:1] <span style="color: #000000;"><--左邊Y軸範圍</span> set y2range [0:1] <span style="color: #000000;"><--右邊Y軸範圍</span> plot sin(x) axis x1y1, \ sin(x)**2 axis x1y2 <span style="color: #000000;"> <--畫sin(x)以左邊Y軸當基準,畫sin(x)平方以右邊Y軸當基準</span></span> <span style="color: #339966;">set ytics nomirror</span> <--設定左邊Y的刻度不要鏡射到右邊軸 <span style="color: #339966;"> set y2tics 0, 0.2 <span style="color: #000000;"><--設定Y2的顯示值與刻度 </span></span>
* 有關含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 | Column | using | 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:各種線與點的顏色跟大小 (下次再補)