Gnuplot 是一種免費分發的繪圖工具,能夠移植到各類主流平臺。它能夠下列兩種模式之一進行操做:當須要調整和修飾圖表使其正常顯示時,經過在 gnuplot 提示符中發出命令,能夠在交互模式下操做該工具。或者,gnuplot 能夠從文件中讀取命令,以批處理模式生成圖表。例如,若是您正在運行一系列的實驗,須要每次運行後都查看結果圖表;或者當您在圖表最初生成好久之後須要返回圖表修改某些內容時,批處理模式能力會特別有用。當在 WYSIWIG 編輯器中很難捕獲用於修飾圖表的鼠標單擊事件時,您能夠很容易地將 gnuplot 命令保存在文件中,六個月後將其加載到交互式會話中從新執行。 html
Gnuplot 是在 1986 年由 Colin Kelley 和 Thomas Williams 最初開發的。許多參與者都在爲不一樣的「終端」建立變種方面作出了貢獻。在 1989 和 1990 年,這些變種被合併到 gnuplot 2.0 中。2004 年 4 月,發佈了 4.0 版本。本教程將適用於 4.0 版本,可是這裏介紹的大多數命令應該也適用於其餘版本。在適當的地方,我將說起其中的主要區別。 參考資料中列出了 gnuplot 的官方 Web 站點。 linux
下面,咱們爲初學者提供了實踐指南;可是即便您之前有一些 gnuplot 的經驗,您也可能會在 4.0 版本中發現新的慣例和命令。咱們從簡單的正弦曲線開始,將其定製爲咱們所但願看到的形狀。而後咱們將研究如何繪製一組數據點。在本文中,咱們僅限於 2D 繪圖,由於它們是最多見的。 shell
初學用戶時常可以很好地想出他們的圖表形狀,可是不知道須要使用什麼 gnuplot 命令。因此瞭解 gnuplot 的關鍵是很好地掌握它的詞彙表,其他應該憑足夠的直覺。在本教程中,我僅能對您將在 gnuplot 中充分使用的通用選項提供一個瞭解;本教程並非毫無遺漏的。因此,例如,我告訴您如何設置 x 範圍來限制圖表中 x 軸的範圍。設置 y 範圍與 x 範圍類似(在命令中使用 yrange
,而不是 xrange
),但我將再也不討論。 electron
基礎編輯器
經過在 shell 命令提示符中輸入 gnuplot
啓動 gnuplot。您首先看到提示符號 >
。該提示符是進入 gnuplot 的輸入點;Linux 用戶將習慣於這種方式。例如,您可使用方向鍵來查找之前輸入的命令歷史記錄,而後編輯和從新執行這些命令;Home 和 End 鍵與平時使用沒有區別。能夠對 gnuplot 進行從新編譯以便使用 GNU readline 庫在輸入提示符上來回移動,但相似於默認函數。 ide
Gnuplot 提供了普遍的在線幫助,若是您要作任何有用的事情,則確定會用到這些在線幫助。語法是統一的:經過輸入 help <command>
能夠得到任何命令的幫助。接着啓動 gnuplot,嘗試命令 help set yrange
和 help set
(在每一個命令以後,使用 q
退出幫助)。注意 yrange
是 help set
下的可用子選項之一。通常來講,gnuplot 幫助爲命令的全部可能定製提供進一步的幫助。瀏覽幫助中的示例部分一般就足能夠了解如何使用命令。 函數
Gnuplot 還有大量展現其能力的演示,一般位於安裝的演示子目錄中。爲了得到這些能力,在 gnuplot 提示符下進入此目錄中(例如, cd '/opt/gnuplot/demo'
— 注意 gnuplot 要求全部文件名和目錄名都用單引號或雙引號括起來),而後輸入 load 'all.dem'
。該目錄中的各個 .dem 文件演示了各個函數,all.dem 將它們一次所有加載。但您可能想將此操做延遲到本文結束時進行,這樣咱們能夠開始使用 gnuplot ,無需再進行其餘操做... 工具
對於那些想要繼續的人,能夠在提示符中分別輸入代碼清單中的每行代碼。或者,將整個清單保存到一個臨時文件中,而後經過在 gnuplot 提示中輸入 load 'filename'
(不要忘記引號)來運行代碼。 post
能夠預見的是,2D 繪圖的命令是 plot
。在提示符中輸入 plot sin(x)
:您應該在彈出窗口中看到熟悉的正弦曲線。
咱們剛剛建立了多是最簡單的圖。讓咱們看看如何以不一樣方法定製該圖。假設咱們只想看到一個正弦曲線週期。咱們經過限制圖的默認 x 範圍來完成此操做。使用表示法 [min:max] 來指定範圍。要僅指定最小值,使用 [min:];要僅指定最大值,使用 [:max]。數學上稱此爲所謂的「閉」區間表示法。
這裏咱們使用 [-pi:pi] 獲得一個正弦曲線週期:
set xrange [-pi:pi] replot reset |
咱們剛纔使用了 replot
命令,它執行先前的 plot 命令。當您繪製曲線圖且須要不斷對該圖進行修改以添加想要的特徵時,此命令會很是有用。另外,replot 使您能夠添加更多的圖。嘗試輸入 replot cos(x)
。依照語法,該命令等同於 plot sin(x), cos(x)
。Replot 就是獲取先前的繪圖字符串,添加必要的逗號,而後附加輸入給它的其他部分。
使用的最後一個命令 reset
對於繪製正弦曲線不是必要的。它移除先前全部 set
命令的效果並恢復默認值。所以,在本例中,它將使用默認 x 範圍。
如今讓咱們嘗試一些更奇特的東西: plot sin(x)/x
。您應該看到以下所示圖形:
從剛纔這三個簡單的例子,您能夠看到 gnuplot 可以理解 pi 並具備豐富的自帶數學函數詞彙表。它甚至知道很是有用的管理正態分佈的統計函數,以及深奧的特殊函數,如朗伯、貝塞爾、beta 和 gamma 函數(還有更多!),這些函數一般僅在 mathematica 等功能齊全的數學工具中才會有。根據經驗,語法與 C 中的語法類似,C 中的語法又與日常數學中使用的語法類似。(一個重要的不一樣是指數的表示法:爲了方便,x 的 y 次冪寫爲 x**y
)。
接着,將圖命名爲(「My First Graph」),並命名軸(x 軸是「angle, in degrees」,y 軸是「sin(angle)」)。
set title "My first graph" set xlabel "Angle, \n in degrees" set ylabel "sin(angle)" plot sin(x) |
注意 xlabel 中的 \n
會產生新的一行。通常來講,gnuplot 在雙引號內的字符串中進行相似於 C 的反斜槓處理。Windows 用戶注意:若是您想文件名使用雙引號括起來的字符串表示,則必須使用兩個反斜槓:如 "c:\\developerworks"
(或者可使用一個正斜槓: "c:/developerworks"
)。
如今,咱們注意到 x 軸實際沒有標記爲度數,看起來不是很好。要修改此問題,經過調整 x 軸上的 tic 標記,使指定的(主)標記僅以 90 度增長和輔標記以 45 度增長。主 tics 的「級別」爲 0,這是默認值;輔 tics 的級別爲 1。每一個點分別由一個 3 元組指定: "label"
(放在引號中)、 <point-at-which-tic-is-made>
和 <optional-level>
。
set xrange [-pi:pi] # we want only one cycle set xtics ("0" 0, \ "90" pi/2, "-90" -pi/2, \ "" pi/4 1, "" -pi/4 1, \ "" 3*pi/4 1, "" -3*pi/4 1) set grid set xlabel "Angle,\n in degrees" set ylabel "sin(angle)" plot sin(x) |
注意對 +45 度和 -45 度輔標記使用了空標籤 ("")。還要注意咱們沒必要以任何順序列出點。像 gnuplot 中的其餘全部項同樣, xtics
命令功能很是多,具備方便的選項,用於以固定增量建立 tic 標記(在對數標度中爲正常倍數),以及用於時間相關數據的特殊格式。查看 help set xtics
中的例子能夠得到更多信息。
做爲邊注,注意咱們使用反斜槓將 xtics 命令擴展成多個輸入行。這樣可使比較長或比較複雜的命令更易讀懂。
咱們還用 set grid
來設置網格,該命令使您能夠從數量上查看圖。到如今爲止,咱們大量地使用了 set
命令。Gnuplot 有一種撤銷設置的統一方法:在 gnuplot 4.0 中,命令是 unset
。例如,若是您不想要網格,使用 unset grid
。4.0 之前的版本,命令是 set nogrid
。
順便說一下,咱們提供的全部例子均可以在交互模式或批處理模式下運行。要以交互模式運行,在提示符中輸入每一個命令。要以批處理模式運行,將命令輸入或添加到文本文件中,而後在 gnuplot 提示符中使用 load 'filename'
讀入文件,或者在 shell 提示符下將其做爲參數提供給 gnuplot: $ gnuplot filename
。使用第二種方法,gnuplot 會在執行輸入文件中的全部命令後退出,因此當直接繪圖到文件中(請參見下一節)時,採用批處理模式執行特別有效。若是在屏幕上繪圖時使用第二種方法,輸出窗口一出現(當 gnuplot 退出時)就會消失,因此您須要使用顯式的「pause -1」命令(請參閱 help pause
)來保持窗口。
批處理模式操做中使用的 Gnuplot 命令文件每每停留一會,從而幫助使用註釋來提升可讀性。 #
後面的直到行結束的內容是註釋。因此在示例清單 3 中,gnuplot 不處理 we want only one cycle
。
在啓動時,您可能注意到終端類型設置爲 X11
。Gnuplot 採用標準設計,能夠在多個終端設備上繪圖。這包括直接打印到多種打印機中,包括 Epson、HP 和 Imagen 打印機。它甚至能夠在僞設備中繪圖,如 postscript 和 png。這主要涉及生成輸出文件,而不是可查看文件或打印輸出。這是將您的圖表包含在其餘報表中的一種技巧。雖然我尚未發如今 Windows 中與在 Linux 中有什麼不一樣,本文檔建議您在設置輸出文件名以前先設置終端類型:
set terminal png # gnuplot recommends setting terminal before output set output "output.png" # The output filename; to be set after setting # terminal replot |
如今,文件 output.png 中有了您剛纔繪製的圖,且能夠包含在一個更大的報表中。許多廣泛使用的排版和製圖程序都有專門的終端,這些程序包括 Adobe Illustrator( set term aifm
)、Corel Draw( set term corel
)、AutoCad( set term dxf
)和多種 LaTex 相關的終端( eepic
、 latex
、 pstricks
、 texdraw
、 tpic
等等)。您還能夠獲得 PostScript、enhanced PostScript (eps) 或 Adobe PDF 格式的文件。您的 gnuplot 版本可能沒有編譯全部的終端驅動程序 —— 例如,Windows 用戶不須要 Xll 終端,Linux 用戶不須要 Windows 終端。相似地,出於法律緣由,gnuplot 4.0 移除了對 gif 終端的支持。
全部終端在能力上都不相同。其中的一些(如 LaTeX)可能不支持文本的旋轉,因此若是您像咱們前面那樣設置 ylabel,在不一樣的終端中可能顯示不同。換句話說,您能夠在 LaTeX 的特定終端中使用 LaTex 命令。例如, set ylabel "$sin(\\theta)$"
(注意咱們使用兩個反斜槓產生一個 LaTex 所需的反斜槓 —— gnuplot 在將雙引號中所括的字符串傳送到終端驅動程序以前,先對其進行反斜槓處理)。如今,您可使用 \input{output.tex}
將輸出文件包含在 LaTeX 文件中。要在 PostScript 終端中得到相同的結果,使用相應的 PostScript 命令: {/Symbol q}
。在 enhanced PostScript 和 LaTeX 中,您可使用表示法 x^{superscript}
和 x_{subscript}
獲得上標文字。還要注意縮寫的終端和輸出命令:
set term post enh # enhanced PostScript, essentially PostScript # with bounding boxes set out 'gplt.eps' set xlabel '{/Symbol q_1} set ylabel 'sin^2({/Symbol q_1})' plot sin(x)**2 |
參考資料部分的代碼補充說明包含具備以上命令的 TeX 文件示例。
版本 4.0 提供了新的功能,Windows 和 X11 終端支持鼠標交互。鼠標支持有兩個主要用途:座標跟蹤和縮放。鼠標指針的當前座標顯示在終端窗口的左下角。經過雙擊第一個鼠標按鈕能夠將其複製到剪貼板中。當您須要設置須要直接座標的標籤或箭頭時,此操做會很是有用。(使用 help arrow
和 help label
能夠得到這些命令的更多詳細信息。)還能夠拖動第二個(或右擊)鼠標按鈕來選擇要放大的矩形區域。在 3D 繪圖中,您能夠拖動鼠標來旋轉圖像(按住 Ctrl 鍵將僅更改軸的視圖;因此對於要用很長時間才能呈現的圖,能夠先更改軸,而後放開 Ctrl 鍵來從新呈現圖)。
鼠標支持還支持一組有用的熱鍵:若是先前對圖進行了放大, u則取消訪大。 g切換網格, l切換座標軸上的刻度; L切換最靠近指針的最標軸上的刻度, r切換標尺,標尺會創建任意原點。啓用了標尺後,屏幕的底部顯示當前座標指針距離標尺原點的 x 軸距離和 y 軸距離以及距離實際原點的 x 軸和 y 軸距離(與點的座標相同)。在 3D 中,方向鍵能夠用在鼠標拖拉的地方來旋轉圖像。空格鍵激活命令窗口, q退出終端窗口。要查看全部選項,在支持鼠標的終端中輸入 h。
默認狀況下,gnuplot 對 x 軸和 y 軸都使用比例係數 1,可是它對控制圖形的長寬比(y 軸長度與 x 軸長度的比率)不起做用。終端驅動程序使用終端的默認長寬比。比例係數、長寬比或者二者均可以使用 set size
命令指定,例如:
# square is synonymous to an aspect ratio of 1;
# scale y-axis by 2, retain x-axis size
set size ratio square 1,2
gnuplot 使用給定的長寬比可否成功繪製圖可能受到終端能力的限制。 set size
也是與 multiplot
命令一塊兒使用纔有用,multiplot 命令用於在同一輸出屏幕或文件中生成多個圖。
正如精明的讀者可能已經從上面關於 replot 的註釋中推測到的,gnuplot 使您能夠同時畫多條線。假設咱們同時繪製正弦和餘弦曲線。簡單的 plot 命令爲 plot sin(x), cos(x)
;要畫的曲線以逗號分隔。若是再也不指定其餘項,gnuplot 自動顯示兩個曲線圖,從而它們能夠互相區別 —— 在諸如 Windows 和 Xll 的終端中,gnuplot 使用不一樣的顏色。單色終端使用不一樣種類的線顯示曲線圖。經過查看圖例(或鍵),您應該可以知道圖中的線分別是何種曲線。gnuplot 還容許您指定繪圖的樣式,以便得到進一步的控制:
unset xtics # keep all other things simple
plot sin(x) with linespoints pointtype 5, cos(x) w boxes lt 4
with
子句(請參閱 help plot with
,若是使用版本 4.0,還有 help plotting styles
)使您能夠詳細而精確地指定線的樣式。在本例中,咱們說明兩種有用的樣式。第一種樣式 linespoints
一般在對數據繪圖時很是有用,它在涉及的每一個示例或數據點處標記一個點,並使用線性插值法鏈接連續的點。這裏咱們另外指定點類型爲 5,它選擇終端容許的第五種點。第二種樣式 boxes
更適合繪製直方圖數據。注意咱們如何在 cos(x) 曲線中將 with
縮寫成 w
。相似地, lt
是 linetype 的縮寫,是另外一個特定於終端的設置,它選擇終端能夠繪製的四種線。沒必要說(什麼,您尚未嘗試 help plot with
嗎?),您可使用 pt
代替冗長的 pointtype。若是想在多條線中使用相同的繪圖樣式(在一個 plot 命令中或在多個 plot 命令中),可使用 set 命令設置繪圖樣式。在 gnuplot 4.0 中,使用 set style function linespoints
;之前的版本使用語法 set function style boxes
。要更改用於繪製與函數相對的數據集合的樣式,使用 set style data linespoints
(之前的版本使用 set data style linespoints
)。
with
子句是咱們使用除了 set
以外的其餘項來定製圖的第一個例子。一些其餘廣泛使用的選項也能夠直接在 plot 命令中設置。例如,還能夠設置 xrange: plot [-pi:pi] sin(x)
。對默認繪圖選項的快速而隨意的一次性更改則使用此類語法。要在多個圖中或在多個 plot 命令中從新使用,須要使用 set
命令。
當繪製兩條或多條曲線時,咱們須要關鍵字或圖例來對它們進行區分。默認狀況下,關鍵字在右上角;可是若是它妨礙了圖,能夠將關鍵字放到其餘位置 —— 若是願意,甚至能夠放到圖外。下面的代碼片斷將關鍵字放在了左上角,並在它周圍設置了一個框。咱們還經過在 plot 命令中給定明確的標題來控制圖例中爲曲線提供的名稱。title 能夠縮寫爲 t,正如咱們對餘弦曲線的設置。若是不想在圖例中命名曲線,使用 notitle
,而不是 title
。最後一點,也是新用戶常常出錯的地方就是若是有標題,標題必須放在 with
子句的前面:
set key top left set key box plot [-pi:pi] sin(x) title "sinusoid" with linespoints pointtype 5, \ cos(x) t 'cosine' w boxes lt 4 |
上面,咱們在同一圖中繪製了正弦和餘弦曲線。Gnuplot 使您還能夠繪製多個圖,這樣它們能夠並排顯示在同一輸出屏幕或文件中。在某些排版系統中,以一個文件的形式包含兩個圖形比分別包含兩個圖形要更容易。
下面是簡單說明的 multiplot
,它繪製正弦、餘弦及其各自倒數的曲線圖。基本方法是將屏幕或圖像文件的邊框比例設爲 1。而後,咱們繪製不一樣的曲線圖,從而它們能夠每一個圖佔據屏幕的四分之一。咱們還經過使用屏幕座標(請參閱 help coordinates
,得到關於不一樣類型座標系統的討論)設置原點來控制曲線圖顯示的位置。另外,注意每一個 plot 還自動計算軸、tic 等等的寬度 —— 這樣您可能必須調整邊距寬度以使不一樣繪圖的軸排成一行。在本例中,我必須將左邊距設置爲 6 個字符寬度,以便調整 cosec(x) = 1/sin(x) 的科學記數法中的 tics。
set xrange [-pi:pi] # Uncomment the following to line up the axes # set lmargin 6 # Gnuplot recommends setting the size and origin before going to # multiplot mode # This sets up bounding boxes and may be required on some terminals set size 1,1 set origin 0,0 # Done interactively, this takes gnuplot into multiplot mode # and brings up a new prompt ("multiplot >" instead of "gnuplot >") set multiplot # plot the first graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0,0.5 plot sin(x) # plot the second graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0,0 plot 1/sin(x) # plot the third graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0.5,0.5 plot cos(x) # plot the fourth graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0.5,0 plot 1/cos(x) # On some terminals, nothing gets plotted until this command is issued unset multiplot # remove all customization reset |
雖然本教程只是出於說明目的,大部份內容都集中於繪製正弦曲線,您極可能很想對試驗數據、銷售數據或其餘相似數據繪圖。在這一節,咱們將使用 IBM 的股票價格做爲數據集合說明如何繪製不一樣的圖(本例的原始數據包含在 參考資料部分中):
日期 | 開盤 | 最高 | 最低 | 收盤 |
10-Jun-04 | 90.23 | 90.75 | 89.89 | 90.46 |
9-Jun-04 | 89.90 | 90.55 | 89.81 | 90.09 |
8-Jun-04 | 88.64 | 90.50 | 88.40 | 90.04 |
7-Jun-04 | 88.75 | 88.99 | 88.01 | 88.64 |
4-Jun-04 | 87.95 | 88.49 | 87.50 | 87.56 |
3-Jun-04 | 87.85 | 88.10 | 87.35 | 87.35 |
2-Jun-04 | 88.64 | 88.64 | 87.89 | 87.98 |
1-Jun 04 | 88.00 | 88.48 | 87.30 | 88.12 |
大多數數據集合都是數字列,可是這個數據集合有所不一樣,由於 x 軸是時間數據。下列代碼告訴 gnuplot 如何讀取和格式化 x 軸上的時間數據(有關詳細信息,請參閱 help time/data
和 help set timefmt
):
set xdata time # The x axis data is time set timefmt "%d-%b-%y" # The dates in the file look like 10-Jun-04 set format x "%b %d" # On the x-axis, we want tics like Jun 10 |
一旦設置完成,可使用下列命令對開盤價繪圖。咱們選擇在不一樣的開盤價之間使用直線插值法,並使用 linespoints
樣式,而不僅是 points
:
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:2 with linespoints
象往常同樣,["31-May-04":"11-Jun-04"] 顯式設置了 xrange,但不是徹底必要的。注意範圍的 min
和 max
須要指定爲符合 timefmt
的字符串。
取決於使用的繪圖樣式,gnuplot 在繪製一個點時最多可使用六個不一樣的編號。當讀入記錄時,列從 1 開始編號。 using 1:2
告訴 plot 命令使用第一列做爲 x 軸,第二列做爲 y 軸。因此要繪製收盤價圖,咱們將使用 using 1:5
。
每次 gnuplot 看到新的數據分隔符時,列編號就會增長。默認狀況下,數據分隔符爲空格。因此若是時間格式中間有空格(例如 10 Jun 04
,而不是 10-Jun-04
),咱們將須要使用 using 1:4
代替 1:2
。對於 x 軸,咱們僅須要指定數據開始的第一列。Gnuplot 可以智能地使用 timefmt 字符串讀取其餘列。
using
使您能夠添加兩個以上的冒號,用於指定特定繪圖樣式可能須要的任何其餘列。您還可使用 $n
表示第 n 列,從而對二進制表達式進行繪圖。在一個徹底虛構的示例中,咱們假設不一樣的價格表示不一樣的試驗運行,咱們要繪製平均價、最高價和最低價。 yerrorbars
樣式使您能夠繪製 y-high/y-low 值(咱們在 using
修飾符中指定爲 x:y:ylow:yhigh
)以及計算 y 軸四個價格的平均值爲 ($2+$3+$4+$5)/4:
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:($2+$3+$4+$5)/4:4:3 \
title 'daily prices, IBM' with yerrorbars
errorlines 樣式是類似的,但它還在繪製的 y 軸點之間繪製線段。對於繪製財務條形圖,Gnuplot 還有單獨的樣式,分別是最高價、最低價和 tics 在左邊,右邊爲開盤價和收盤價。咱們使用 set bars
顯示開盤價和收盤價的較大 tics):
set bars 5
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:2:3:4:5 with financebars
您還能夠查看 help plotting styles
得到其餘相關樣式,如 candlesticks、boxerrorbars 和錯誤繪圖樣式。
固然,對於真實的數據集合,事情可能會變得更復雜。最多見的就是數據集合不使用空格字符分隔數據點。gnuplot 4.0 提供了新的功能,您可使用 set datafile separator <string>
指定本身的分隔符。一樣地,您還可使用 set datafile commentschar
指定除了 #
以外的註釋字符。若是須要更多的控制,您能夠爲 using
修飾符明確指定格式字符串。Gnuplot 使用 C 標準庫的 scanf
函數以及給定格式字符串(有關詳細信息,請參閱 help using
)讀入數據。我講述此方法僅是爲了內容更全面;可以以此方法讀入的數據集合也可使用 set data file separator
進行處理,或者經過顯式指定 using
修飾符中要使用的列編號來進行處理。例如,若是須要忽略第一列中的字符串,則使用 2:3 進行繪圖。爲了得到更徹底的靈活性,在具備 popen 函數的 Unix 類系統中,在將文件傳送給 plot 命令以前,可使用文本處理實用程序對文件進行預處理。例如: plot "< awk --f preprocess.awk data.file"
。不幸的是,該命令不能在全部系統中使用。最後的一個方法是在 gnuplot 中使用輸入文件以前對其進行預處理。
有時,真實的數據可能沒有包含全部的點 —— 對於要繪圖的列,可能有 x 值,但缺乏相應的 y 值。Gnuplot 容許您指定字符串,用於表示缺乏的數據點。例如:
set datafile missing 'NaN' # The IEEE floating point not-a-number
注意,在 4.0 版本以前,命令是 set missing <string>
。
不幸的是,處理缺乏數據的數據點的方法取決於 using
說明。若是想了解用法 plot 'file'
、 plot 'file' using 1:2
和 plot 'file' using ($1):($2)
之間區別的詳細信息,請參閱 help using
。可是爲了安全起見,一般指定列使用顯式的 using
格式,若是您想徹底清除不合適的數據點,不要使用表達式求值(第三個選項會由於括號而對錶達式求值)—— 而是,預處理數據文件並用計算的表達式的結果添加確切的列。
往常,您可能以一些無效的數據點而結束。若是 gnuplot 被告知忽略無效數據點,您仍能夠對這樣的數據集合繪圖。Gnuplot 忽略未定義的點,這樣當您遇到不合適的點時,技巧就是使用未定義的 y 值,如1/0。相似於 C 的三元算符能夠很容易地表達此信息(若是您不熟悉此函數,請參閱 help ternary
;在定義分段函數時它也很是有用)。下面是 help using
中介紹的一個例子,它使您以第二列做爲 y 值來繪圖,除非第三列大於 10:
plot 'file' using 1:($3>10 ? $2 : 1/0)
雖然本文向您展現了會常用的大多數命令,但可能有些地方您還須要進一步地研究。在這一節,咱們簡要討論其中一些概念,而後提供了其中一個 gnuplot 演示文件(electron.dem)中的腳本,該腳本繪製電子學中常見的幅頻響應圖,用以說明它們的用法。
plot
命令中使用它們以前再定義參數變量。 set dummy jw
)。 axes
子句, plot
命令可使用不一樣的軸集合,如 x2y2。默認狀況下, plot
命令以 x 軸和 y 軸繪圖。當您須要同時繪製範圍爲不一樣量級或具備不一樣單位的線時,此高級功能很是有幫助。在下面的示例中,y 軸繪製振幅,最大值爲 1,y2 軸繪製相位,最大值爲 100。若是對軸的相同集合繪圖,振幅曲線幾乎看不出來。 set logscale
命令以對數刻度繪製任何軸。此命令在軸上繪製以 10 爲底的值的對數。您能夠顯式設置使用的底數(例如, set logscale 2
,或若是僅爲 x 主軸和 y 主軸設置底數,則可使用 set logscale xy 2
)。 下例摘自與 gnuplot 一塊兒提供的演示文件 electron.dem。此腳本使用了上面討論的全部高級概念:
A(jw) = ({0,1}*jw/({0,1}*jw+p1)) * (1/(1+{0,1}*jw/p2)) p1 = 10 p2 = 10000 set dummy jw set grid x y2 set key default set logscale xy set log x2 unset log y2 set title "Amplitude and Phase Frequency Response" set xlabel "jw (radians)" set xrange [1.1 : 90000.0] set x2range [1.1 : 90000.0] set ylabel "magnitude of A(jw)" set y2label "Phase of A(jw) (degrees)" set ytics nomirror set y2tics set tics out set autoscale y set autoscale y2 plot abs(A(jw)), 180/pi*arg(A(jw)) axes x2y2 |
在本文中,咱們討論了使用新發布的 gnuplot 4.0 繪製 2D 圖形的複雜性。雖然咱們接觸了大多數的關於使用 gunplot 的重要方面,但限於篇幅有限,咱們仍有少數主題沒有討論。值得注意的一些省略範圍包括從很是簡單的參數函數繪圖(請參見 help parametric
)、極座標( help polar
),到曲線擬合(它使用戶定義曲線與給定數據集合相匹配)。曲線擬合是一門藝術,須要用一整篇文章來說述,可是請參閱 help fit
和 beginners_guide and tips 來對它得到初步瞭解。
正如咱們所看到的,gnuplot 是高度可定製的。我將以這個最後的技巧來結束本文,它說明如何在多個 gnuplot 會話中重用您的定製。定製的主要命令是 set
命令。您可使用 save set 'filename'
保存當前會話的全部設置。 save var <file>
和 save func <file>
分別保存用戶定義的變量和函數。可是沒法保存傳送到單一 plot 命令的定製(例如, plot [-pi:pi] sin(x)
中的 x 範圍)。這些文件可使用 load <file>
讀回。Gnuplot 還在開始時查找名爲 .gnuplot
的文件。它首先在當前目錄中查找,而後在用戶的主目錄中查找(Windows 中的 USERPROFILE 目錄)。若是找到初始化文件,gnuplot 會執行其中的命令。一些用戶將此方法用於設置終端類型和定義常用的函數或變量。