隨筆-49  評論-67  文章-27  trackbacks-0

          鄭小宏

          2005-10-21

          對于在 Linux 下工作的人,如果你經常要畫一些二維圖和簡單的三維圖的話,那么, gnuplot 無疑是一個非常好的選擇,不僅圖形漂亮,而且操作簡單。當然如果需要質量更高的三維圖,請用其他的一些專業繪圖軟件。建議大家學會使用 gnuplot 。這個小軟件通常都是 Redhat Linux 自帶的,但自帶的版本是 3.7 的,建議將其升級到 4.0 ,新版本具有很多新功能。最新版本可以到 http://www.gnuplot.info 下載。

          一些最基本的操作請大家看說明書。這里總結一下我在使用過程中遇到的一些問題以及解決的辦法,目的是讓那些以前不會的或不熟練的能快速入門,會畫自己想要的圖,因為原來的說明書很長,較難有針對性地很快找到自己想要的信息。這里簡單的總結不可能面面俱到,所以大家不要抱怨我寫的不全,更全面的了解還是請看說明書,網上的資料也多的是。其實這也是我們從網上一點一點搜集和摸索出來的。我相信看完后,應該平時最常見的問題基本上都能在這里找到答案。如果大家在使用過程中摸索到了我沒有寫到的技巧和體會,或有其它建議,請大家提告訴我,以不斷完善這篇總結,謝謝!

          ?

          一、???????? 基礎篇:

          linux 命令提示符下運行 gnuplot 命令啟動,輸入 quit q exit 退出。

          ?

          1 plot 命令

          gnuplot > plot sin(x) with line linetype 3 linewidth 2

          gnuplot > plot sin(x) w l lt 3 lw 2??? % 用線畫,線的類型(包括顏色與虛線的類型)是 3 ,線的寬度是 2 ,對函數 sin(x) 作圖

          gnuplot > plot sin(x) with point pointtype 3 pointsize 2?

          gnuplot > plot sin(x) w p pt 3 ps 2??? % 用點畫,點的類型(包括顏色與點的類型)是 3 ,點的大小是 2

          gnuplot > plot sin(x) title 'f(x)' w lplt 3 lw 2 pt 3 ps 2??? % 同時用點和線畫,這里 title ‘f(x)’ 表示圖例上標 'f(x)' ,如果不用則用默認選項

          gnuplot > plot sin(x)??? % 此時所有選項均用默認值。如果缺某一項則將用默認值

          gnuplot > plot ‘a.dat’ u 2:3? w l lt 3 lw 2 % 利用數據文件 a.dat 中的第二和第三列作圖

          ?

          順便提一下,如這里最前面的兩個例子所示,在 gnuplot 中,如果某兩個詞,按字母先后順序,前面某幾個字母相同,后面的不同,那么只要寫到第一個不同的字母就可以了。如 with ,由于沒有其它以 w 開頭的詞,因此可以用 w 代替, line 也可以用 l 代替。

          ?

          2 、同時畫多條曲線

          gnuplot > plot sin(x) title ‘sin(x)’ w l lt 1 lw 2, cos(x) title ‘cos(x)’? w l lt 2 lw 2? %兩條曲線是用逗號隔開的。畫多條曲線時,各曲線間均用逗號隔開就可以了。

          ?

          以上例子中是對函數作圖,如果對數據文件作圖,將函數名稱換為數據文件名即可,但要用單引號引起來。

          ?

          3 、關于圖例的位置

          默認位置在右上方。

          gnuplot > set key left? % 放在左邊,有 left right 兩個選項

          gnuplot > set key bottom? % 放在下邊,只有這一個選項;默認在上邊

          gnuplot > set key outside? % 放在外邊,但只能在右面的外邊

          以上三個選項可以進行組合。如:

          gnuplot > set key left bottom? % 表示左下邊

          ?

          還可以直接用坐標精確表示圖例的位置,如

          gnuplot > set key 0.5,0.6? % 將圖例放在 0.5,0.6 的位置處

          ?

          4 、關于坐標軸

          gnuplot > set xlabel ‘x’?? %x 軸標為 ‘x’

          gnuplot > set ylabel ‘y’?? %y 軸標為 ’y’

          gnuplot > set ylabel ‘DOS’ tclt 3? % 其中的 tc lt 3 表示 ’DOS’ 的顏色用第三種顏色。

          gnuplot > set xtics 1.0??? %x 軸的主刻度的寬度為 1.0 ,同樣可以為 y 軸定義 ytics

          gnuplot > set mxtics 3??? %x 軸上每個主刻度中畫 3 個分刻度,同樣可以為 y 軸定義 mytics

          gnuplot > set border 3 lt 3 lw 2 % 設為第三種邊界,顏色類型為 3 ,線寬為 2

          同樣可以為上邊的 x 軸(稱為 x2 )和右邊 y (稱為 y2 )軸進行設置,即 x2tics mx2tics y2tics my2tics

          gnuplot > set xticsnomirror

          gnuplot > unset x2tics???? % 以上兩條命令去掉上邊 x2 軸的刻度

          ?

          gnuplot > set yticsnomirror

          gnuplot > unset y2tics???? % 以上兩條命令去掉右邊 y 軸的刻度

          ?

          5 、在圖中插入文字

          gnuplot > set label ‘sin(x)’ at 0.5,0.5? % 在坐標( 0.5,0.5 )處加入字符串 ’sin(x)’

          在輸出為 .ps .eps 文件時,如果在 set term 的語句中加入了 enhanced 選現,則可以插入上下標、希臘字母和特殊符號。上下標的插入和 latex 中的方法是一樣的。

          ?

          6 、在圖中添加直線和箭頭

          gnuplot > set arrow from 0.0,0.0 to 0.6,0.8??? % 從( 0.0,0.0 )到( 0.6,0.8 )畫一個箭頭

          gnuplot > set arrow from 0.0,0.0 to 0.6,0.8 lt 3 lw 2?? % 這個箭頭顏色類型為 3 ,線寬類型為 2

          gnuplot > set arrow from 0.0,0.0 to 0.6,0.8 noheadlt 3 lw 2? % 利用 nohead 可以去掉箭頭的頭部,這就是添加直線的方法。

          ?

          注意,在 gnuplot 中,對于插入多個的 label arrow 等等,系統會默認按先后順序分別對各個 label arrow 進行編號,從 1 開始。如果以后要去掉某個 label arrow ,那么只要用 unset 命令將相應的去掉即可。如:

          gnuplot > unset arrow 2

          將去掉第二個箭頭。

          ?

          7 、圖的大小和位置

          gnuplot >set size 0.5,0.5? % 長寬均為默認寬度的一半,建議用這個取值,尤其是畫成 ps eps 圖形的時候

          gnuplot >set origin 0.0,0.5?? % 設定圖的最左下角的那一點在圖形面板中的位置。這里圖將出現在左上角。

          ?

          8 、畫三維圖

          gnuplot >splot 文件名 ’ u 2:4:5? % 以第二和第四列作為 x y 坐標,第五列為 z 坐標。

          ?

          9 .將圖形輸出到文件

          gnuplot 中,輸出文件的格式是由 terminal 來控制的。默認的情況下,都是輸出到屏幕,即終端模式為 X11 。如果想輸出到文件,則必須對 terminal 進行設置。要了解有那些終端類型,可以輸入 set terminal 后回車,所有支持的終端模式(或文件格式)都列出來了。就我來說,輸出文件的格式用得最多的是 ps eps 文件。這在運行畫圖命令 plot splot 前必須先運行如下兩條命令:

          ?

          gnuplot > set term post eps color solid enh

          gnuplot > set output ‘a.eps

          ?

          其中第一條命令為設置終端模式, post 即為 postscript 模式,這是輸出到 ps eps 文件必須有的。后面的 eps color solid 以及 enh 選項均可以有或沒有,根據你的需要。 eps 表示輸出為 eps 文件,沒有就輸出為 ps 文件; color 表示輸出圖形為彩色,不用就會保存為黑白的; solid 表示輸出圖中的所有線都用實線,不用則除了第一條線為實線外,其它的均用不同的虛線;使用 enh (enhanced) 選項可以在圖中插入上下標、希臘字母和特殊符號,不用則不能實現這些功能。后面的選項可以根據自己的需要選擇一個或幾個。

          ?

          第二條命令對 output 的設置表示要輸出的文件的名字。但是請注意,運行完這條命令后,還僅僅是定義了輸出文件的名字,實際上,圖還沒畫到這個文件里去。因此運行這兩條命令還只是進行了必須的設置。然后運行如下命令

          gnuplot > plot sin(x) w l

          gnuplot >replot (假如前面已經運行過 plot replot 命令的話)

          這時,圖形就在上面指定的文件中了。

          ?

          要輸出為其它格式,同樣要進行這樣的設置,比如要輸出為 jpg 格式,則在運行畫圖命令前先運行如下命令:

          gnuplot > set term jpeg

          gnuplot > set output ‘a.jpg

          ?

          如果要由其它模式再返回到輸出到屏幕,則運行如下命令:

          gnuplot > set term X11

          二、提高篇:

          1 、如何在同一張圖里同時畫多個圖

          gnuplot >set multiplot?? % 設置為多圖模式

          gnuplot >set origin 0.0,0.5?? % 設置第一個圖的原點的位置

          gnuplot >set size 0.5,0.5? % 設置第一個圖的大小

          gnuplot > plot “a1.dat”

          gnuplot >set origin 0.5,0.5?? % 設置第二個圖的原點的位置

          gnuplot >set size 0.5,0.5? ?% 設置第二個圖的大小

          gnuplot > plot “a2.dat”

          gnuplot >set origin 0.0,0.0?? % 設置第三個圖的原點的位置

          gnuplot >set size 0.5,0.5? % 設置第三個圖的大小

          gnuplot > plot “a3.dat”

          gnuplot >set origin 0.5,0.0?? % 設置第四個圖的原點的位置

          gnuplot >set size 0.5,0.5? % 設置第四個圖的大小

          gnuplot > plot “a4.dat”

          當然,如果后一個圖中的某個量的設置和前一個的相同,那么后一個中的這個量的設置可以省略。例如上面對第二、第三和第四個圖的大小的設置。前一個圖中對某個量的設置也會在后一個圖中起作用。如果要取消在后面圖中的作用,必須用如下命令,如取消 label ,用

          gnuplot > unset label

          ?

          ?

          2 、作二維圖時,如何使兩邊坐標軸的單位長度等長

          gnuplot > set size square??? % 使圖形是方的
          gnuplot> set size 0.5,0.5??? %
          使圖形是你要的大小
          gnuplot> set xrange[-a:a]
          gnuplot> set yrange[-a:a]??? %
          兩坐標軸刻度范圍一樣
          gnuplot> plot ‘a.dat

          ?

          3 、如何在同一張圖里利用左右兩邊的 y 軸分別畫圖

          gnuplot > set xticsnomirror?? % 去掉上面坐標軸 x2 的刻度
          gnuplot> set yticsnomirror?? %
          去掉右邊坐標軸 y2 的刻度
          gnuplot> set x2tics?????? %
          讓上面坐標軸 x2 刻度自動產生
          gnuplot> set y2tics???? %
          讓右邊坐標軸 y2 的刻度自動產生
          gnuplot> plot sin(x),cos(x) axes x1y2??? %cos(x)
          x1y2 坐標, axes x1y2 表示用 x1y2 坐標軸
          gnuplot> plot sin(x),cos(x) axes x2y2???? %cos(x)
          x2y2 坐標, axes x2y2 表示用 x2y2 坐標軸
          gnuplot> set x2range[-20:20]?? %
          設定 x2 坐標的范圍
          gnuplot> replot
          gnuplot> set xrange[-5:5]? %
          設定 x 坐標的范圍
          gnuplot> replot
          gnuplot> set xlabel 'x'
          gnuplot> set x2label 't'
          gnuplot> set ylabel 'y'
          gnuplot> set y2label 's'
          gnuplot> replot
          gnuplot> set title 'The figure'
          gnuplot> replot
          gnuplot> set x2label 't' textcolorlt 3??? %textcolorlt 3
          tc lt 3 設置坐標軸名稱的顏色

          ?

          4 、如何插入希臘字母和特殊符號

          一般只能在 ps eps 圖中,且必須指定 enhanced 選項。在 X11 終端(即顯示器)中無法顯示。

          gnuplot > set terminal postscript enhanced

          然后希臘字母就可以通過 {/Symbol a} 輸入。例如

          gnuplot > set label ‘{/Symbol a}’

          各種希臘字母與特殊符號的輸入方法請見安裝包中 gnuplot- 4.0.0 /docs/psdoc 目錄下的 ps_guide.ps 文件。


          另外還可參見:
          http://t16web.lanl.gov/Kawano/gnuplot/label-e.html#4.3

          ?

          5 gnuplot 中如何插入 Angstrom (埃)這個符號 (A 上面一個小圓圈 )

          				腳本中在插入前先加入
          				
          						
          						
          				
          		
          				
          						
          								gnuplot
          						
          				
          				
          						>
          				
          				set encoding iso_8859_1
          		
          				這個命令,然后就可以通過
          				“{\305}”
          				加入了。如橫坐標要標上“
          				k(1/
          				?
          				)
          				”:
          				
          						
          						
          				
          		
          				
          						
          								gnuplot
          						
          				
          				
          						>
          				
          				set xlabel 'k(1/{\305})
          		
          				
          						?
          				
          		
          				如果是
          				
          						multiplot
          				
          				模式,則這個命令必須放在
          				
          						
          						
          				
          		
          				
          						
          								gnuplot
          						
          				
          				
          						>
          				
          				set multiplot
          		
          				的前面。
          				
          						
          						
          				
          		
          				
          						?
          				
          		
          				如果后面還要插入別的轉義字符,那么還要在插入字符后加入如下命令:
          				
          						
          						
          				
          		
          				
          						set
          				
          				 encoding default
          		
          				
          						?
          				
          		
          				安裝包
          				
          				gnuplot-
          				
          						4.0.0
          				
          				/docs/psdoc/ps_guide.ps
          				文件中的表中的‘
          				E
          				’代表那一列的
          				所有符號都用這個方法輸入。
          				
          						
          						
          				
          		

          ?

          6 gnuplot 畫等高線圖

          gnuplot >splot? ‘ 文件名 .dat’? u 1:2:3? w? l?? % 做三維圖

          gnuplot >set dgrid3d 100,100 % 設置三維圖表面的網格的數目

          gnuplot > replot

          gnuplot >set contour??? % 設置畫等高線

          gnuplot >set cntrparam? levels? incremental -0.2,0.01,0.2?? % 設置等高線的疏密和范圍,數據從 ?? -0.2 0.2 中間每隔 0.01 畫一條線

          gnuplot >unset surface?? 去掉上面的三維圖形

          最后用鼠標拽動圖形,選擇合理的角度即可。或者直接設置 (0,0) 的視角也可以:

          gnuplot > set view 0,0

          gnuplot > replot

          ?

          這里注意,畫三維圖的數據文件必須是分塊的,也就是 x 每變換一個值, y 在其變化范圍內變化一周,這樣作為一塊,然后再取一個 x 值, y 再變化一周,作為下一數據塊,等等。塊與塊之間用一空行格開。

          ?

          7 、如何畫漂亮的 pm3d

          gnuplot > set pm3d??????????????? % 設置 pm3d 模式

          gnuplot > set isosamples 50,50?????? % 設置網格點

          gnuplot > splot x**2+y**2????????? %畫三維圖

          gnuplot > splot x**2+y**2 w pm3d?? %畫成 pm3d 模式,注意比較變化

          gnuplot > set view 0,0????????????? %設置視角,( 0 0 )將投影到底面上去

          gnuplot > splot x**2+y**2 w pm3d?? %重畫,注意看變化

          gnuplot > unset ztics?????????????? % z 軸上的數字給去掉

          gnuplot > set isosamples 200,200???? %使網格變細

          gnuplot > replot?????????????????? %重畫,注意看變化,主要是過渡更光滑

          ?

          8 、利用腳本文件避免重復輸入

          有時候對某個數據文件做好一張圖后,下次可能還要利用這個數據文件作圖,但某個或某些設置要作些細微變化。這時候,可以把第一次作圖時的命令全部寫到一個文件里,如 a.plt ,下次只要將相應的設置做修改后,用下面的命令就會自動運行文件所有的命令而最后得到你要的圖:

          gnuplot > load ‘a.plt

          作為一個例子,假設文件名為 a.plt ,里面的內容為:

          set pm3d

          set view 0,0

          unset ztics

          set isosamples 200,200

          splot x**2+y**2 w pm3d

          set term post color

          set output ‘a.ps

          replot

          ?

          那么啟動 gnuplot 后,只要運行如下命令就可以了:

          gnuplot > load ‘a.plt

          ?

          如果我們要得到的僅僅是 .ps .eps 圖,那也可以在 linux 命令提示符下直接運行如下命令:

          [zxh@theoryzxh]$gnuplota.plt

          ?

          9 、在 gnuplot 模式下運行 linux 命令

          gnuplot 提示符下也可以運行 linux 命令,但必須在相應的命令前面加上 ! 號。例如,假設很多參量都已經設置好了,但需要對某個數據文件 a.dat 進行修改后再畫圖,則可以用如下方式

          gnuplot >!vi a.dat

          通過這種方式,所有的 linux 命令都可以在 gnuplot 環境里運行。

          ?

          另外,也可以在 gnuplot 的提示符后輸入 shell ,暫時性退出 gnuplot ,進入 linux 環境,做完要做的事情后,運行 exit 命令,又回到 gnuplot 環境下。

          gnuplot > shell

          [zxh@theoryzxh]$via.f

          [zxh@theoryzxh]$f 77 a .f

          [zxh@theoryzxh]$a.out??? ( 假設生成 a.dat 數據文件 )

          [zxh@theoryzxh]$exit

          gnuplot >plot ‘a.dat’ w l

          ?

          如有其它問題,歡迎共同探討。 E-mail exhzheng@163.com

          posted on 2006-06-12 14:24 思考 閱讀(2049) 評論(0)  編輯  收藏 所屬分類: 網絡仿真

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 伽师县| 新田县| 高碑店市| 凤翔县| 临西县| 大埔区| 云梦县| 巴中市| 定兴县| 高淳县| 遂溪县| 安龙县| 巴马| 贵州省| 武胜县| 大同市| 彰武县| 闸北区| 仙居县| 桃源县| 武义县| 安庆市| 通道| 荃湾区| 团风县| 昆山市| 香港 | 巴青县| 秦皇岛市| 得荣县| 远安县| 仁布县| 梁山县| 特克斯县| 蒙阴县| 兴仁县| 彰化市| 铜陵市| 芜湖市| 瑞昌市| 无棣县|