欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
gnuplot 讓您的數據可視化

級別: 初級

Nishanth Sastry (nishanth_sastry@us.ibm.com), 專(zhuān)職軟件工程師, IBM

2004 年 8 月 01 日

使用 Gnuplot 4.0 將數據和函數轉換為專(zhuān)業(yè)的圖表,Gnuplot 4.0 是一種免費分發(fā)的繪圖工具。本文是 gnuplot 的實(shí)踐指南,著(zhù)重講述了有效使用此工具的一些慣例。

Gnuplot 是一種免費分發(fā)的繪圖工具,可以移植到各種主流平臺。它可以下列兩種模式之一進(jìn)行操作:當需要調整和修飾圖表使其正常顯示時(shí),通過(guò)在 gnuplot 提示符中發(fā)出命令,可以在交互模式下操作該工具?;蛘?,gnuplot 可以從文件中讀取命令,以批處理模式生成圖表。例如,如果您正在運行一系列的實(shí)驗,需要每次運行后都查看結果圖表;或者當您在圖表最初生成很久以后需要返回圖表修改某些內容時(shí),批處理模式能力會(huì )特別有用。當在 WYSIWIG 編輯器中很難捕獲用于修飾圖表的鼠標單擊事件時(shí),您可以很容易地將 gnuplot 命令保存在文件中,六個(gè)月后將其加載到交互式會(huì )話(huà)中重新執行。

Gnuplot 是在 1986 年由 Colin Kelley 和 Thomas Williams 最初開(kāi)發(fā)的。許多參與者都在為不同的“終端”創(chuàng )建變種方面做出了貢獻。在 1989 和 1990 年,這些變種被合并到 gnuplot 2.0 中。2004 年 4 月,發(fā)布了 4.0 版本。本教程將適用于 4.0 版本,但是這里介紹的大多數命令應該也適用于其他版本。在適當的地方,我將提及其中的主要區別。 參考資料中列出了 gnuplot 的官方 Web 站點(diǎn)。

下面,我們?yōu)槌鯇W(xué)者提供了實(shí)踐指南;但是即使您以前有一些 gnuplot 的經(jīng)驗,您也可能會(huì )在 4.0 版本中發(fā)現新的慣例和命令。我們從簡(jiǎn)單的正弦曲線(xiàn)開(kāi)始,將其定制為我們所希望看到的形狀。然后我們將研究如何繪制一組數據點(diǎn)。在本文中,我們僅限于 2D 繪圖,因為它們是最常見(jiàn)的。

GNG:Gnuplot 不是 GNU

雖然它的名稱(chēng)可能意味著(zhù)其他方面,但 GPL 不包含 gnuplot。對于法律方面,gnuplot FAQ #1.7 指出:“從您不必為其付錢(qián)方面來(lái)講,Gnuplot 是免費軟件。不過(guò)從您不能免費分發(fā) gnuplot 的修改版本方面來(lái)講,它又不是免費軟件。請閱讀和接受發(fā)行版中的版權文件?!?/p>

初學(xué)用戶(hù)時(shí)常能夠很好地想出他們的圖表形狀,但是不知道需要使用什么 gnuplot 命令。所以了解 gnuplot 的關(guān)鍵是很好地掌握它的詞匯表,其余應該憑足夠的直覺(jué)。在本教程中,我僅能對您將在 gnuplot 中充分使用的通用選項提供一個(gè)了解;本教程并不是毫無(wú)遺漏的。所以,例如,我告訴您如何設置 x 范圍來(lái)限制圖表中 x 軸的范圍。設置 y 范圍與 x 范圍相似(在命令中使用 yrange,而不是 xrange ),但我將不再討論。

基礎

通過(guò)在 shell 命令提示符中輸入 gnuplot 啟動(dòng) gnuplot。您首先看到提示符號 > 。該提示符是進(jìn)入 gnuplot 的輸入點(diǎn);Linux 用戶(hù)將習慣于這種方式。例如,您可以使用方向鍵來(lái)查找以前輸入的命令歷史記錄,然后編輯和重新執行這些命令;Home 和 End 鍵與平時(shí)使用沒(méi)有區別??梢詫?gnuplot 進(jìn)行重新編譯以便使用 GNU readline 庫在輸入提示符上來(lái)回移動(dòng),但類(lèi)似于默認函數。

Gnuplot 提供了廣泛的在線(xiàn)幫助,如果您要做任何有用的事情,則肯定會(huì )用到這些在線(xiàn)幫助。語(yǔ)法是統一的:通過(guò)輸入 help <command> 可以獲得任何命令的幫助。接著(zhù)啟動(dòng) gnuplot,嘗試命令 help set yrangehelp set(在每個(gè)命令之后,使用 q 退出幫助)。注意 yrangehelp set 下的可用子選項之一。一般來(lái)說(shuō),gnuplot 幫助為命令的所有可能定制提供進(jìn)一步的幫助。瀏覽幫助中的示例部分通常就足可以了解如何使用命令。

Gnuplot 還有大量展示其能力的演示,通常位于安裝的演示子目錄中。為了獲得這些能力,在 gnuplot 提示符下進(jìn)入此目錄中(例如, cd '/opt/gnuplot/demo' — 注意 gnuplot 要求所有文件名和目錄名都用單引號或雙引號括起來(lái)),然后輸入 load 'all.dem' 。該目錄中的各個(gè) .dem 文件演示了各個(gè)函數,all.dem 將它們一次全部加載。但您可能想將此操作延遲到本文結束時(shí)進(jìn)行,這樣我們可以開(kāi)始使用 gnuplot ,無(wú)需再進(jìn)行其他操作...

對于那些想要繼續的人,可以在提示符中分別輸入代碼清單中的每行代碼?;蛘?,將整個(gè)清單保存到一個(gè)臨時(shí)文件中,然后通過(guò)在 gnuplot 提示中輸入 load 'filename' (不要忘記引號)來(lái)運行代碼。

可以預見(jiàn)的是,2D 繪圖的命令是 plot 。在提示符中輸入 plot sin(x) :您應該在彈出窗口中看到熟悉的正弦曲線(xiàn)。


圖 1. sin(x)

我們剛剛創(chuàng )建了可能是最簡(jiǎn)單的圖。讓我們看看如何以不同方法定制該圖。假設我們只想看到一個(gè)正弦曲線(xiàn)周期。我們通過(guò)限制圖的默認 x 范圍來(lái)完成此操作。使用表示法 [min:max] 來(lái)指定范圍。要僅指定最小值,使用 [min:];要僅指定最大值,使用 [:max]。數學(xué)上稱(chēng)此為所謂的“閉”區間表示法。

這里我們使用 [-pi:pi] 得到一個(gè)正弦曲線(xiàn)周期:


清單 1. 從 -pi 到 +pi 的 sin(x)
set xrange [-pi:pi]
                        replot
                        reset
                        


圖 2. 重繪正弦曲線(xiàn)圖

我們剛才使用了 replot 命令,它執行先前的 plot 命令。當您繪制曲線(xiàn)圖且需要不斷對該圖進(jìn)行修改以添加想要的特征時(shí),此命令會(huì )非常有用。另外,replot 使您可以添加更多的圖。嘗試輸入 replot cos(x)。依照語(yǔ)法,該命令等同于 plot sin(x), cos(x) 。Replot 就是獲取先前的繪圖字符串,添加必要的逗號,然后附加輸入給它的其余部分。

使用的最后一個(gè)命令 reset 對于繪制正弦曲線(xiàn)不是必要的。它移除先前所有 set 命令的效果并恢復默認值。因此,在本例中,它將使用默認 x 范圍。

現在讓我們嘗試一些更奇特的東西: plot sin(x)/x 。您應該看到如下所示圖形:


圖 3. sin(x)/x

從剛才這三個(gè)簡(jiǎn)單的例子,您可以看到 gnuplot 能夠理解 pi 并具有豐富的自帶數學(xué)函數詞匯表。它甚至知道非常有用的管理正態(tài)分布的統計函數,以及深奧的特殊函數,如朗伯、貝塞爾、beta 和 gamma 函數(還有更多?。?,這些函數通常僅在 mathematica 等功能齊全的數學(xué)工具中才會(huì )有。根據經(jīng)驗,語(yǔ)法與 C 中的語(yǔ)法相似,C 中的語(yǔ)法又與平常數學(xué)中使用的語(yǔ)法相似。(一個(gè)重要的不同是指數的表示法:為了方便,x 的 y 次冪寫(xiě)為 x**y )。

接著(zhù),將圖命名為(“My First Graph”),并命名軸(x 軸是“angle, in degrees”,y 軸是“sin(angle)”)。


清單 2. 命名圖和軸
set title "My first graph"
                        set xlabel "Angle, \n in degrees"
                        set ylabel "sin(angle)"
                        plot sin(x)
                        

注意 xlabel 中的 \n 會(huì )產(chǎn)生新的一行。一般來(lái)說(shuō),gnuplot 在雙引號內的字符串中進(jìn)行類(lèi)似于 C 的反斜杠處理。Windows 用戶(hù)注意:如果您想文件名使用雙引號括起來(lái)的字符串表示,則必須使用兩個(gè)反斜杠:如 "c:\\developerworks" (或者可以使用一個(gè)正斜杠: "c:/developerworks" )。

現在,我們注意到 x 軸實(shí)際沒(méi)有標記為度數,看起來(lái)不是很好。要修改此問(wèn)題,通過(guò)調整 x 軸上的 tic 標記,使指定的(主)標記僅以 90 度增加和輔標記以 45 度增加。主 tics 的“級別”為 0,這是默認值;輔 tics 的級別為 1。每個(gè)點(diǎn)分別由一個(gè) 3 元組指定: "label" (放在引號中)、 <point-at-which-tic-is-made><optional-level>。


清單 3. 改變軸上 tic 并設置網(wǎng)格
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)
                        


圖 4. 帶有 tics、標題、網(wǎng)格和標簽的軸的 sin(x)

注意對 +45 度和 -45 度輔標記使用了空標簽 ("")。還要注意我們不必以任何順序列出點(diǎn)。像 gnuplot 中的其他所有項一樣, xtics 命令功能非常多,具有方便的選項,用于以固定增量創(chuàng )建 tic 標記(在對數標度中為正常倍數),以及用于時(shí)間相關(guān)數據的特殊格式。查看 help set xtics 中的例子可以獲得更多信息。

作為邊注,注意我們使用反斜杠將 xtics 命令擴展成多個(gè)輸入行。這樣可以使比較長(cháng)或比較復雜的命令更易讀懂。

我們還用 set grid 來(lái)設置網(wǎng)格,該命令使您可以從數量上查看圖。到現在為止,我們大量地使用了 set 命令。Gnuplot 有一種撤銷(xiāo)設置的統一方法:在 gnuplot 4.0 中,命令是 unset。例如,如果您不想要網(wǎng)格,使用 unset grid 。4.0 以前的版本,命令是 set nogrid 。

順便說(shuō)一下,我們提供的所有例子都可以在交互模式或批處理模式下運行。要以交互模式運行,在提示符中輸入每個(gè)命令。要以批處理模式運行,將命令輸入或添加到文本文件中,然后在 gnuplot 提示符中使用 load 'filename' 讀入文件,或者在 shell 提示符下將其作為參數提供給 gnuplot: $ gnuplot filename 。使用第二種方法,gnuplot 會(huì )在執行輸入文件中的所有命令后退出,所以當直接繪圖到文件中(請參見(jiàn)下一節)時(shí),采用批處理模式執行特別有效。如果在屏幕上繪圖時(shí)使用第二種方法,輸出窗口一出現(當 gnuplot 退出時(shí))就會(huì )消失,所以您需要使用顯式的“pause -1”命令(請參閱 help pause )來(lái)保持窗口。

批處理模式操作中使用的 Gnuplot 命令文件往往停留一會(huì ),從而幫助使用注釋來(lái)提高可讀性。 # 后面的直到行結束的內容是注釋。所以在示例清單 3 中,gnuplot 不處理 we want only one cycle 。





回頁(yè)首


終端設備 —— 題外話(huà)

在啟動(dòng)時(shí),您可能注意到終端類(lèi)型設置為 X11。Gnuplot 采用標準設計,可以在多個(gè)終端設備上繪圖。這包括直接打印到多種打印機中,包括 Epson、HP 和 Imagen 打印機。它甚至可以在偽設備中繪圖,如 postscript 和 png。這主要涉及生成輸出文件,而不是可查看文件或打印輸出。這是將您的圖表包含在其他報表中的一種技巧。雖然我還沒(méi)有發(fā)現在 Windows 中與在 Linux 中有什么不同,本文檔建議您在設置輸出文件名之前先設置終端類(lèi)型:


清單 4. 設置輸出和終端類(lèi)型
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 中有了您剛才繪制的圖,且可以包含在一個(gè)更大的報表中。許多普遍使用的排版和制圖程序都有專(zhuān)門(mén)的終端,這些程序包括 Adobe Illustrator( set term aifm )、Corel Draw( set term corel)、AutoCad( set term dxf )和多種 LaTex 相關(guān)的終端( eepic、 latex 、 pstricks、 texdraw 、 tpic 等等)。您還可以得到 PostScript、enhanced PostScript (eps) 或 Adobe PDF 格式的文件。您的 gnuplot 版本可能沒(méi)有編譯所有的終端驅動(dòng)程序 —— 例如,Windows 用戶(hù)不需要 Xll 終端,Linux 用戶(hù)不需要 Windows 終端。類(lèi)似地,出于法律原因,gnuplot 4.0 移除了對 gif 終端的支持。

所有終端在能力上都不相同。其中的一些(如 LaTeX)可能不支持文本的旋轉,所以如果您像我們前面那樣設置 ylabel,在不同的終端中可能顯示不一樣。換句話(huà)說(shuō),您可以在 LaTeX 的特定終端中使用 LaTex 命令。例如, set ylabel "$sin(\\theta)$"(注意我們使用兩個(gè)反斜杠產(chǎn)生一個(gè) LaTex 所需的反斜杠 —— gnuplot 在將雙引號中所括的字符串傳送到終端驅動(dòng)程序之前,先對其進(jìn)行反斜杠處理)?,F在,您可以使用 \input{output.tex} 將輸出文件包含在 LaTeX 文件中。要在 PostScript 終端中獲得相同的結果,使用相應的 PostScript 命令: {/Symbol q} 。在 enhanced PostScript 和 LaTeX 中,您可以使用表示法 x^{superscript}x_{subscript} 得到上標文字。還要注意縮寫(xiě)的終端和輸出命令:


清單 5. eps 驅動(dòng)程序的能力
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
                        

參考資料部分的代碼補充說(shuō)明包含具有以上命令的 TeX 文件示例。

鼠標支持

版本 4.0 提供了新的功能,Windows 和 X11 終端支持鼠標交互。鼠標支持有兩個(gè)主要用途:坐標跟蹤和縮放。鼠標指針的當前坐標顯示在終端窗口的左下角。通過(guò)雙擊第一個(gè)鼠標按鈕可以將其復制到剪貼板中。當您需要設置需要直接坐標的標簽或箭頭時(shí),此操作會(huì )非常有用。(使用 help arrowhelp label 可以獲得這些命令的更多詳細信息。)還可以拖動(dòng)第二個(gè)(或右擊)鼠標按鈕來(lái)選擇要放大的矩形區域。在 3D 繪圖中,您可以拖動(dòng)鼠標來(lái)旋轉圖像(按住 Ctrl 鍵將僅更改軸的視圖;所以對于要用很長(cháng)時(shí)間才能呈現的圖,可以先更改軸,然后放開(kāi) Ctrl 鍵來(lái)重新呈現圖)。

鼠標支持還支持一組有用的熱鍵:如果先前對圖進(jìn)行了放大, u則取消訪(fǎng)大。 g切換網(wǎng)格, l切換坐標軸上的刻度; L切換最靠近指針的最標軸上的刻度, r切換標尺,標尺會(huì )建立任意原點(diǎn)。啟用了標尺后,屏幕的底部顯示當前坐標指針距離標尺原點(diǎn)的 x 軸距離和 y 軸距離以及距離實(shí)際原點(diǎn)的 x 軸和 y 軸距離(與點(diǎn)的坐標相同)。在 3D 中,方向鍵可以用在鼠標拖拉的地方來(lái)旋轉圖像??崭矜I激活命令窗口, q退出終端窗口。要查看所有選項,在支持鼠標的終端中輸入 h。

控制比例和長(cháng)寬比

默認情況下,gnuplot 對 x 軸和 y 軸都使用比例系數 1,但是它對控制圖形的長(cháng)寬比(y 軸長(cháng)度與 x 軸長(cháng)度的比率)不起作用。終端驅動(dòng)程序使用終端的默認長(cháng)寬比。比例系數、長(cháng)寬比或者兩者都可以使用 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 使用給定的長(cháng)寬比能否成功繪制圖可能受到終端能力的限制。 set size 也是與 multiplot 命令一起使用才有用,multiplot 命令用于在同一輸出屏幕或文件中生成多個(gè)圖。





回頁(yè)首


繪制多條曲線(xiàn)

正如精明的讀者可能已經(jīng)從上面關(guān)于 replot 的注釋中推測到的,gnuplot 使您可以同時(shí)畫(huà)多條線(xiàn)。假設我們同時(shí)繪制正弦和余弦曲線(xiàn)。簡(jiǎn)單的 plot 命令為 plot sin(x), cos(x);要畫(huà)的曲線(xiàn)以逗號分隔。如果不再指定其他項,gnuplot 自動(dòng)顯示兩個(gè)曲線(xiàn)圖,從而它們可以互相區別 —— 在諸如 Windows 和 Xll 的終端中,gnuplot 使用不同的顏色。單色終端使用不同種類(lèi)的線(xiàn)顯示曲線(xiàn)圖。通過(guò)查看圖例(或鍵),您應該能夠知道圖中的線(xiàn)分別是何種曲線(xiàn)。gnuplot 還允許您指定繪圖的樣式,以便獲得進(jìn)一步的控制:

unset xtics # keep all other things simple
plot sin(x) with linespoints pointtype 5, cos(x) w boxes lt 4

圖 5. 多條曲線(xiàn)

with 子句(請參閱 help plot with ,如果使用版本 4.0,還有 help plotting styles )使您可以詳細而精確地指定線(xiàn)的樣式。在本例中,我們說(shuō)明兩種有用的樣式。第一種樣式 linespoints 通常在對數據繪圖時(shí)非常有用,它在涉及的每個(gè)示例或數據點(diǎn)處標記一個(gè)點(diǎn),并使用線(xiàn)性插值法連接連續的點(diǎn)。這里我們另外指定點(diǎn)類(lèi)型為 5,它選擇終端允許的第五種點(diǎn)。第二種樣式 boxes 更適合繪制直方圖數據。注意我們如何在 cos(x) 曲線(xiàn)中將 with 縮寫(xiě)成 w 。類(lèi)似地, lt是 linetype 的縮寫(xiě),是另一個(gè)特定于終端的設置,它選擇終端可以繪制的四種線(xiàn)。不必說(shuō)(什么,您還沒(méi)有嘗試 help plot with嗎?),您可以使用 pt 代替冗長(cháng)的 pointtype。如果想在多條線(xiàn)中使用相同的繪圖樣式(在一個(gè) plot 命令中或在多個(gè) plot 命令中),可以使用 set 命令設置繪圖樣式。在 gnuplot 4.0 中,使用 set style function linespoints ;以前的版本使用語(yǔ)法 set function style boxes。要更改用于繪制與函數相對的數據集合的樣式,使用 set style data linespoints(以前的版本使用 set data style linespoints )。

gnuplot 如何工作

除了趣味性,本次練習顯示了 gnuplot 實(shí)際如何對函數繪圖 —— 它獲取多個(gè)樣本并在每個(gè)樣本點(diǎn)繪制值。通常,它會(huì )在這些點(diǎn)間平滑地插入值;使用 boxes 樣式則強制它使用平面的直方圖,linespoints 樣式用一個(gè)點(diǎn)標記每個(gè)樣本。要更清楚地觀(guān)看,顯式地將采樣比率設為 10( set samples 10 )并重新繪圖。(然后將其設置會(huì )默認值 100)。

with 子句是我們使用除了 set 之外的其他項來(lái)定制圖的第一個(gè)例子。一些其他普遍使用的選項也可以直接在 plot 命令中設置。例如,還可以設置 xrange: plot [-pi:pi] sin(x)。對默認繪圖選項的快速而隨意的一次性更改則使用此類(lèi)語(yǔ)法。要在多個(gè)圖中或在多個(gè) plot 命令中重新使用,需要使用 set 命令。

當繪制兩條或多條曲線(xiàn)時(shí),我們需要關(guān)鍵字或圖例來(lái)對它們進(jìn)行區分。默認情況下,關(guān)鍵字在右上角;但是如果它妨礙了圖,可以將關(guān)鍵字放到其他位置 —— 如果愿意,甚至可以放到圖外。下面的代碼片段將關(guān)鍵字放在了左上角,并在它周?chē)O置了一個(gè)框。我們還通過(guò)在 plot 命令中給定明確的標題來(lái)控制圖例中為曲線(xiàn)提供的名稱(chēng)。title 可以縮寫(xiě)為 t,正如我們對余弦曲線(xiàn)的設置。如果不想在圖例中命名曲線(xiàn),使用 notitle ,而不是 title 。最后一點(diǎn),也是新用戶(hù)經(jīng)常出錯的地方就是如果有標題,標題必須放在 with 子句的前面:


清單 6. 定制圖的關(guān)鍵字或圖例
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
                        


圖 6. 定制關(guān)鍵字

在同一屏幕上繪制相關(guān)的圖

上面,我們在同一圖中繪制了正弦和余弦曲線(xiàn)。Gnuplot 使您還可以繪制多個(gè)圖,這樣它們可以并排顯示在同一輸出屏幕或文件中。在某些排版系統中,以一個(gè)文件的形式包含兩個(gè)圖形比分別包含兩個(gè)圖形要更容易。

下面是簡(jiǎn)單說(shuō)明的 multiplot ,它繪制正弦、余弦及其各自倒數的曲線(xiàn)圖?;痉椒ㄊ菍⑵聊换驁D像文件的邊框比例設為 1。然后,我們繪制不同的曲線(xiàn)圖,從而它們可以每個(gè)圖占據屏幕的四分之一。我們還通過(guò)使用屏幕坐標(請參閱 help coordinates ,獲得關(guān)于不同類(lèi)型坐標系統的討論)設置原點(diǎn)來(lái)控制曲線(xiàn)圖顯示的位置。另外,注意每個(gè) plot 還自動(dòng)計算軸、tic 等等的寬度 —— 這樣您可能必須調整邊距寬度以使不同繪圖的軸排成一行。在本例中,我必須將左邊距設置為 6 個(gè)字符寬度,以便調整 cosec(x) = 1/sin(x) 的科學(xué)記數法中的 tics。


清單 7. Multiplot 示例
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
                        


圖 7. Multiplot 繪圖





回頁(yè)首


繪制數據圖

雖然本教程只是出于說(shuō)明目的,大部分內容都集中于繪制正弦曲線(xiàn),您很可能很想對試驗數據、銷(xiāo)售數據或其他類(lèi)似數據繪圖。在這一節,我們將使用 IBM 的股票價(jià)格作為數據集合說(shuō)明如何繪制不同的圖(本例的原始數據包含在 參考資料部分中):

表 1. IBM 股票價(jià)格

日期 開(kāi)盤(pán) 最高 最低 收盤(pán)
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

大多數數據集合都是數字列,但是這個(gè)數據集合有所不同,因為 x 軸是時(shí)間數據。下列代碼告訴 gnuplot 如何讀取和格式化 x 軸上的時(shí)間數據(有關(guān)詳細信息,請參閱 help time/datahelp set timefmt ):


清單 8. 設置時(shí)序數據
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
                        

一旦設置完成,可以使用下列命令對開(kāi)盤(pán)價(jià)繪圖。我們選擇在不同的開(kāi)盤(pán)價(jià)之間使用直線(xiàn)插值法,并使用 linespoints樣式,而不只是 points

plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:2 with linespoints


圖 8. 繪制開(kāi)盤(pán)價(jià)圖

象往常一樣,["31-May-04":"11-Jun-04"] 顯式設置了 xrange,但不是完全必要的。注意范圍的 minmax 需要指定為符合 timefmt 的字符串。

取決于使用的繪圖樣式,gnuplot 在繪制一個(gè)點(diǎn)時(shí)最多可以使用六個(gè)不同的編號。當讀入記錄時(shí),列從 1 開(kāi)始編號。 using 1:2 告訴 plot 命令使用第一列作為 x 軸,第二列作為 y 軸。所以要繪制收盤(pán)價(jià)圖,我們將使用 using 1:5 。

每次 gnuplot 看到新的數據分隔符時(shí),列編號就會(huì )增加。默認情況下,數據分隔符為空格。所以如果時(shí)間格式中間有空格(例如 10 Jun 04 ,而不是 10-Jun-04 ),我們將需要使用 using 1:4 代替 1:2 。對于 x 軸,我們僅需要指定數據開(kāi)始的第一列。Gnuplot 能夠智能地使用 timefmt 字符串讀取其他列。

using 使您可以添加兩個(gè)以上的冒號,用于指定特定繪圖樣式可能需要的任何其他列。您還可以使用 $n 表示第 n 列,從而對二進(jìn)制表達式進(jìn)行繪圖。在一個(gè)完全虛構的示例中,我們假設不同的價(jià)格表示不同的試驗運行,我們要繪制平均價(jià)、最高價(jià)和最低價(jià)。 yerrorbars 樣式使您可以繪制 y-high/y-low 值(我們在 using修飾符中指定為 x:y:ylow:yhigh)以及計算 y 軸四個(gè)價(jià)格的平均值為 ($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


圖 9. 計算平均值

errorlines 樣式是相似的,但它還在繪制的 y 軸點(diǎn)之間繪制線(xiàn)段。對于繪制財務(wù)條形圖,Gnuplot 還有單獨的樣式,分別是最高價(jià)、最低價(jià)和 tics 在左邊,右邊為開(kāi)盤(pán)價(jià)和收盤(pán)價(jià)。我們使用 set bars 顯示開(kāi)盤(pán)價(jià)和收盤(pán)價(jià)的較大 tics):

set bars 5
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:2:3:4:5 with financebars


圖 10. 繪制財務(wù)條形圖

您還可以查看 help plotting styles 獲得其他相關(guān)樣式,如 candlesticks、boxerrorbars 和錯誤繪圖樣式。

處理真實(shí)數據集合

當然,對于真實(shí)的數據集合,事情可能會(huì )變得更復雜。最常見(jiàn)的就是數據集合不使用空格字符分隔數據點(diǎn)。gnuplot 4.0 提供了新的功能,您可以使用 set datafile separator <string> 指定自己的分隔符。同樣地,您還可以使用 set datafile commentschar 指定除了 # 之外的注釋字符。如果需要更多的控制,您可以為 using 修飾符明確指定格式字符串。Gnuplot 使用 C 標準庫的 scanf 函數以及給定格式字符串(有關(guān)詳細信息,請參閱 help using )讀入數據。我講述此方法僅是為了內容更全面;能夠以此方法讀入的數據集合也可以使用 set data file separator 進(jìn)行處理,或者通過(guò)顯式指定 using 修飾符中要使用的列編號來(lái)進(jìn)行處理。例如,如果需要忽略第一列中的字符串,則使用 2:3 進(jìn)行繪圖。為了獲得更完全的靈活性,在具有 popen 函數的 Unix 類(lèi)系統中,在將文件傳送給 plot 命令之前,可以使用文本處理實(shí)用程序對文件進(jìn)行預處理。例如: plot "< awk --f preprocess.awk data.file" 。不幸的是,該命令不能在所有系統中使用。最后的一個(gè)方法是在 gnuplot 中使用輸入文件之前對其進(jìn)行預處理。

有時(shí),真實(shí)的數據可能沒(méi)有包含所有的點(diǎn) —— 對于要繪圖的列,可能有 x 值,但缺少相應的 y 值。Gnuplot 允許您指定字符串,用于表示缺少的數據點(diǎn)。例如:

set datafile missing 'NaN' # The IEEE floating point not-a-number

注意,在 4.0 版本之前,命令是 set missing <string> 。

不幸的是,處理缺少數據的數據點(diǎn)的方法取決于 using 說(shuō)明。如果想了解用法 plot 'file' 、 plot 'file' using 1:2plot 'file' using ($1):($2)之間區別的詳細信息,請參閱 help using。但是為了安全起見(jiàn),通常指定列使用顯式的 using 格式,如果您想完全清除不合適的數據點(diǎn),不要使用表達式求值(第三個(gè)選項會(huì )因為括號而對表達式求值)—— 而是,預處理數據文件并用計算的表達式的結果添加確切的列。

往常,您可能以一些無(wú)效的數據點(diǎn)而結束。如果 gnuplot 被告知忽略無(wú)效數據點(diǎn),您仍可以對這樣的數據集合繪圖。Gnuplot 忽略未定義的點(diǎn),這樣當您遇到不合適的點(diǎn)時(shí),技巧就是使用未定義的 y 值,如1/0。類(lèi)似于 C 的三元算符可以很容易地表達此信息(如果您不熟悉此函數,請參閱 help ternary ;在定義分段函數時(shí)它也非常有用)。下面是 help using 中介紹的一個(gè)例子,它使您以第二列作為 y 值來(lái)繪圖,除非第三列大于 10:

plot 'file' using 1:($3>10 ? $2 : 1/0)





回頁(yè)首


高級例子

雖然本文向您展示了會(huì )經(jīng)常使用的大多數命令,但可能有些地方您還需要進(jìn)一步地研究。在這一節,我們簡(jiǎn)要討論其中一些概念,然后提供了其中一個(gè) gnuplot 演示文件(electron.dem)中的腳本,該腳本繪制電子學(xué)中常見(jiàn)的幅頻響應圖,用以說(shuō)明它們的用法。

  1. 用戶(hù)定義的函數和變量
    您可以任意定義自己的復雜函數,如下面的 A(jw)。這些函數可以用參數 (p1, p2) 表示,您可以稍后在 plot 命令中使用它們之前再定義參數變量。
  2. 復數
    Gnuplot 可以識別復數。{a,b} 表示復數 a+bi。您可以使用函數 abs() 和 arg() 獲得絕對值和輻角。
  3. 虛變量
    當在 plot 命令中使用 sin(x) 時(shí),gnuplot 將 x 用作虛變量,并對它賦不同的值以獲得示例。當編寫(xiě)復雜的用戶(hù)定義的函數時(shí),您可以使用函數定義中使用的傳統變量名稱(chēng),也可以顯式設置要使用的虛變量的名稱(chēng)(例如, set dummy jw )。
  4. x2 和 y2 軸
    除了常見(jiàn)的沿著(zhù)曲線(xiàn)圖底部和左邊的 x 軸和 y 軸之外,還可以使用曲線(xiàn)圖的頂部(x2)和右端(y2)作為單獨的軸。這些軸都相互獨立,可以單獨設置范圍、tics、標簽和比例(例如對數刻度)。而且,通過(guò)使用 axes 子句, plot 命令可以使用不同的軸集合,如 x2y2。默認情況下, plot 命令以 x 軸和 y 軸繪圖。當您需要同時(shí)繪制范圍為不同量級或具有不同單位的線(xiàn)時(shí),此高級功能非常有幫助。在下面的示例中,y 軸繪制振幅,最大值為 1,y2 軸繪制相位,最大值為 100。如果對軸的相同集合繪圖,振幅曲線(xiàn)幾乎看不出來(lái)。
  5. 對數刻度
    您可以使用 set logscale 命令以對數刻度繪制任何軸。此命令在軸上繪制以 10 為底的值的對數。您可以顯式設置使用的底數(例如, set logscale 2 ,或如果僅為 x 主軸和 y 主軸設置底數,則可以使用 set logscale xy 2)。

下例摘自與 gnuplot 一起提供的演示文件 electron.dem。此腳本使用了上面討論的所有高級概念:


清單 9. 幅頻響應
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
                        


圖 11. 振幅和相位頻率響應





回頁(yè)首


結束語(yǔ)

在本文中,我們討論了使用新發(fā)布的 gnuplot 4.0 繪制 2D 圖形的復雜性。雖然我們接觸了大多數的關(guān)于使用 gunplot 的重要方面,但限于篇幅有限,我們仍有少數主題沒(méi)有討論。值得注意的一些省略范圍包括從非常簡(jiǎn)單的參數函數繪圖(請參見(jiàn) help parametric )、極坐標( help polar ),到曲線(xiàn)擬合(它使用戶(hù)定義曲線(xiàn)與給定數據集合相匹配)。曲線(xiàn)擬合是一門(mén)藝術(shù),需要用一整篇文章來(lái)講述,但是請參閱 help fitbeginners_guide and tips 來(lái)對它獲得初步了解。

常用技巧

正如我們所看到的,gnuplot 是高度可定制的。我將以這個(gè)最后的技巧來(lái)結束本文,它說(shuō)明如何在多個(gè) gnuplot 會(huì )話(huà)中重用您的定制。定制的主要命令是 set 命令。您可以使用 save set 'filename' 保存當前會(huì )話(huà)的所有設置。 save var <file>save func <file> 分別保存用戶(hù)定義的變量和函數。但是無(wú)法保存傳送到單一 plot 命令的定制(例如, plot [-pi:pi] sin(x) 中的 x 范圍)。這些文件可以使用 load <file> 讀回。Gnuplot 還在開(kāi)始時(shí)查找名為 .gnuplot 的文件。它首先在當前目錄中查找,然后在用戶(hù)的主目錄中查找(Windows 中的 USERPROFILE 目錄)。如果找到初始化文件,gnuplot 會(huì )執行其中的命令。一些用戶(hù)將此方法用于設置終端類(lèi)型和定義經(jīng)常使用的函數或變量。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Gnuplot 常用繪圖功能簡(jiǎn)單介紹
Gnuplot|00 簡(jiǎn)介
Gnuplot (一)運行/數學(xué)表達式/簡(jiǎn)單函數繪圖
matlab畫(huà)圖命令積累
gunplot(2)
MATLAB函數畫(huà)圖
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久