- use strict;
- use warnings;
- my %hash;
- while (<DATA>) {
- if (!$hash{$_}) {
- print;
- $hash{$_} += 1;
- }
- }
2017年12月11日 星期一
2017年12月6日 星期三
gnuplot
* 一些設定說明:
- 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
* 實例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 rmar 0
set lmar 0
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" <--設定一些符號並改變字型與大小
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
set nomultiplot <--離開multiplot模式
*實例2:兩個不同Y值的座標軸在同一張圖(參考gnuplot-tips)
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
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:各種線與點的顏色跟大小 (下次再補)
gnuplot script
- 設定
- 還有更多設定可以自由變換組合,下面提供較為常見的設定
#
: 註解行reset
: 重新設定set term png enhanced font 'Verdana,10'
: 設定圖片類型set output 'runtime.png'
: 存檔名稱set logscale {x,y}
: 設定 X 或 Y 軸或是兩者為 logscaleset xrange [a:b]
: 設定 X 軸範圍從 a 到 b (Y 軸亦可);若是看不到圖形,可用 set autoscale 自動調回set xlabel "XXX", a,b
: 設定 X 軸的名稱為 XXX (Y 軸亦同), 從預設向右移動 a,向上移動 bset xlabel "XX" font "Times-Italic,26"
: 設定X軸的名稱為 XX,以 Times-Italic 字型大小 26set title "GGG"
: 設定圖形標題為 GGGset xtics a
: 設定顯示的 X 軸座標與刻度, 每次增加 a ;在 logscale 時,預設的設定會沒有小刻度set xtics a,b
: 設定顯示的 X 軸座標與刻度 起始值 a,每次增加 bset format y "10^{%L}"
:Y 軸的值以 10 的 L 次方顯示set format x "%a.bf"
: X 軸的值以總長 a 位數,小數點以下 b 位顯示set format x "%a.be"
: 以科學記號顯示set format x ""
: 不顯示X軸的座標值set key Q,W Left reverse
: 將圖例與曲線標題倒過來放在圖上座標 (Q,W) 處set key spacing D
: 設定圖例間的寬度增加 D 倍set key title "XXX"
: 設定圖例的名稱set label "SSS" at Q,W
: 設定 SSS 這三個字出現在座標(Q,W)處set label "XX" textcolor lt 2
: 以linetype 2 顯示 XXset grid
: 在各主要刻度畫出格子
訂閱:
文章 (Atom)
標籤
- 大盤 (6)
- 未分類資料夾 (2)
- 英文 (28)
- 書刊雜誌 (11)
- Perl (25)
- TCL (10)
- Uncategoried (1)
- UNIX Linux (43)