pgplot 繪圖副程式庫
安裝 暨 建構 pgplot 的方法
取得套件
取得套件(在此以 pgplot 5.2 版為例),教室機器目錄 /NFS_home/pgplot/ 下也有放,名稱是 pgplot5.2.tar.gz (另外 /NFS_home/pgplot/pgplot 則是 pgplot 主目錄)。copy 到自已的目錄下(如 /NFS_home/u12345678)
PGPLOT 的官方網站:http://www.astro.caltech.edu/~tjp/pgplot/
準備目錄
選擇一個暫時放置原始碼的目錄(打 mkdir /NFS_home/u12345678/pgplot_source),並更改目前所在目錄位置到這個暫時目錄(打 cd /NFS_home/u12345678/pgplot_source),打下列指令解開 (tar -zxf /NFS_home/u12345678/pgplot5.2.tar.gz),如此會在 /NFS_home/u12345678/pgplot_source 目錄下再多產生一個 pgplot 目錄,內有完型整的原始碼套件。基本上先要看的讀我檔案是 aaaread.me,安裝步驟則寫在 install-unix.txt 。
編輯 drivers.list 清單
pgplot 支援不同的畫面顯示及檔案輸出方式可供選擇,這是透過編輯 drivers.list 清單來打開或關掉的。不同作業系統環境之支援度並不相同,最好選剛好夠用的就好了,以避免選到某些不支援的 driver,就要回去開關掉再重做(所有選擇的 drivers 都有支援到,建構 pgplot 環境的動作才會進行下去)。大家可用在 vi 編輯 drivers.list,前面有 "!" 局符號的就代表該項關閉,把 "!" 號刪除就代表該項打開。我們一般至少會選 /NULL、/XWINDOW、/XSERV 以及 /XDISP。
產生 makefile 檔
編輯完了 drivers.list 清單之後,我們要選擇並建立將來 pgplot 套件在系統中存放的目錄,如果你有管理者權限,則放在公共目錄大家用起來會比較方便;若你沒有管理者權限,則在使用者自己任何的目錄下都沒有關係。比方說,你決定完成後的 pgplot 目錄要放在 /NFS_home/u12345678/pgplot,則先在你的 $HOME 目錄位置下建立 pgplot 目錄(打 mkdir /NFS_home/u12345678/pgplot),然後 cd 到那個目錄�堙]打 cd /NFS_home/u12345678/pgplot),然後在該目錄下打
/NFS_home/u12345678/pgplot_source/pgplot/makemake /NFS_home/u12345678/pgplot_source/pgplot linux
上述長指令有三個部分,第一個是指令 makemake 的位置(makemake 是 pgplot 作者寫的一個 script,它並不是一個 UNIX 指令),它前面的一長串路徑是當初原始碼套件包解開的暫放位置,第二部分是原始碼目錄路徑,第三個部分是作業系統類別,在此給 "linux"。如果安裝的 compiler 不同或多於一種而使 pgplot 無法自行偵測找到它要的或是你特別想指定的,則上述長指令後面可再給一個參數,詳細說明請見 install-unix.txt。
下 make 指令
如果上述 "makemake 路徑 作業系統" 有成功,則你在目前目錄(pgplot 安裝目錄)下會看到以下檔案
drivers.list
grexec.f
prpckgl.inc
makefile
pgplot.inc
rgb.txt再來,你就可以在目前目錄下打 make (make 是一個重要的 UNIX 指令,有興趣同學請打 man make 或參考線上 UNIX 辭典) 。它會根據目錄下的 makefile 一步步編譯所有 pgplot 提供的副程式,產生物件檔 (*.o) 並加以組裝成程式庫檔 (library file) 的格式,我們主要就是要那個 libpgplot.a 的 library 檔。 另外,由於我們有選擇 /XWINDOW 或 /XSERV,會再多產生 pgxwin_server 可執行檔;又因為我們也選了/XDISP, 會再多產生 pgdisp 可執行檔。
跑範例程式測試
最後,我們跑範例程式來測試是否完全成功。為了讓顯示程式知道 pgplot 的安裝目錄在那�堙A才能讀得到所需的檔案,首先要確定環境變數有把 PGPLOT_DIR 定義好,這需要在 csh/tcsh 打下列指令:
setenv PGPLOT_DIR /NFS_home/u12345678/pgplot
或 sh/bash/ksh 下打下列指令:
PGPLOT_DIR = /NFS_home/u12345678/pgplot ; export PGPLOT_DIR
跑範例程式的方法,是打其程式的名稱,如 ./pgdemo1(若不在目前目錄下則需包含適當的路徑)。
如果你的 shell 抱怨它找不到 libpgplot.so,則你可以先打 tcsh 再打
setenv LD_LIBRARY_PATH /NFS_home/u12345678/pgplot
然後再執行 ./pgdemo1
設定使用者登入的預設環境值
很多複雜的程式,由於需要其特定目錄下的其他協同工具程式一起運作,或是需要其特定目錄下的某些資料,甚至是設定值,因此需要系統藉由環境變數來告訴主程式這些特定的目錄在那�堙C這種替特定程式設定環境變數的動作,固然可以由使用者直接下指令或是寫一個自動執行的 script 來進行,但這樣做使用都者都仍需記得去下一個或一些指令。如果每次進入系統都希望有那樣的環境變數設定,則可次在 shell 的 .cshrc 成 .profile(或 .login)
.profile 是每次登入系統時要做的動作,而 .cshrc 則是每次起動
如果你用的是 bash,則 .bashrc 與 .bash_profile 是對等於前者的兩個檔。
.cshrc 及 .profile 範例
http://phi.sinica.edu.tw/aspac/notes/94/N94002/
http://netlab.cse.yzu.edu.tw/~statue/freebsd/docs/aasir/ch18.pdf
http://ece.niu.edu.tw/~chu/download/doc/UNIX.txt
pgplot 使用的環境變數範例
以 S105 電腦教室的環境為例(使用 csh / tcsh shell 環境):
set path = (/NFS_home/pgplot/pgplot $path)
setenv PGPLOT_DIR /NFS_home/pgplot/pgplot
setenv LD_LIBRARY_PATH /NFS_home/pgplot/pgplot
setenv PGPLOT_FONT /NFS_home/pgplot/pgplot/grfont.dat你可以把這個 script 叫做 set_pgplot.csh,每次使用 pgplot 前在 tcsh/csh 下(電腦教室使用者預設的 shell)打 source set_pgplot.csh 即可。
至於在考試用的 VMware 環境,除了前述標準方法(其中 -L /usr/local/pgplot -lpgplot 請放在整行的最後面,在我們現在的系統中比較容易找得到):
gfortran -o my_prog.x my_prog.f -L /usr/X11R6/lib -lX11 -L /usr/local/pgplot -lpgplot
之外,也可用以下作法:先把 libpgplot.a 從 /usr/local/pgplot 或 ~/examples 目錄 copy 到目前工作的目錄來,在編譯鍊結時則改下(以下要打在同一行)
gfortran -o my_prog.x -L /usr/X11R6/lib -lX11 my_prog.f libpgplot.a
如何用撰寫及編譯可利用 pgplot 繪圖的 Fortran 程式
撰寫
學習如何使用 pgplot 最好的方法,是:
(1) 編譯並執行其內附的一系列範例程式 pgdemo1.f ~ pgdemo17.f(在虛擬機器是放置在 /usr/local/pgplot/examples 內,自行安裝者請到 pgplot 主目錄下的 examples 目錄找)(建立完 pgplot 環境及副程式庫後會自動產生 pgdemo1 ~ pgdemo17 可執行檔,因此也可以去 copy 過來而不必自行編譯),觀看其功能展示。再
(2) 到相關程式及副程式中參考其指令(繪圖副程式)名稱及其使用的方式,並同時
(3) 從線上手冊查詢該指令(副程式)中之各參數意義及用法的精確定義。
,其畫出之效果如下:
最重要之基本指令
PGOPEN
這是一個整數值函數,一被運算就會開啟顯示或印出的介面(即當初 drivers.list 所打開的裝置之一),它的引數是裝置名稱的字串(含前面的斜線 "/",如 "/xwin"),其結果的值則表示介面裝置開啟的成功與否。如果是整數 0 則表示開啟成功,非零值代表失敗。要使用 PGPLOT 的繪圖功能之前一定要叫用這個函數,以下為常用的語法示範:
IF (PGOPEN('?') .LE. 0) STOP
這表示向使用者詢問輸出表置類別,開啟失敗則程式停止。if (pgopen('/xwin') .le. 0) stop
這表示直接使用 /xwin 裝置,不必詢問。一樣若開啟失敗則程式停止。
PGENV
設定繪圖環境值,包含視窗大小及比例、x 軸 y 軸範圍、以及座標軸之畫法。
PGENV (XMIN, XMAX, YMIN, YMAX, JUST, AXIS)
PGLAB
印上座標軸及圖面上方的文字標簽
PGLAB (XLBL, YLBL, TOPLBL)
PGLINE
從給定的一套 N 個值的 X(N) 與 Y(N) 座標陣列值�堙A連筆畫出直線段。
PGPT
從給定的一套 N 個值的 X(N) 與 Y(N) 座標陣列值�堙A一次畫出個別符號點。符號之類型可選擇,如下圖:
另可參考 PGPNTS ,每批符號可以不一樣。
PGCLOS
關閉
其他有用之指令
PGSCI
設定顏色 (Set Color Index),背景色是 0。
PGCURS
在滑鼠指標所在的任置接任一文字鍵可傳回該位置的絕對座標以及所按的字符,是很有用的互動式輸入工具。
PGBAND
與上述指令類似,只是多加了滑鼠指標在移動時有一條線連著上一次選取的點,"Elastic band 即橡皮筋"。
PGPAP
設定圖框 (紙張 PAPer) 大小(要在 PGENV 之前使用),所給入的兩個實數參數分別是 x 的長度以及 y 相對於 x 的長度大小。例如,若要作出 x 邊長是 5 吋的 4:3 的畫面,則呼叫 PGPAP (5.0, 0.75) 。
PGCIRC
畫圓,三個實數參數分別是 x-座標、y-座標,以及半徑。
PGSFS
設定填色屬性 (Set Fill-area Style)。會影響 PGCIRC、PGRECT、PGPOLY 畫出是空心的或是填滿的。
PGTEXT 及 PGPTXT
在圖上印出文字
PGPANL
切換到圖面上不同的面版(經由 PGSUBP 或 PGBEG 所切割出來的)
PGSLCT
選擇輸出裝置,裝置的整數號碼是由整數函數 PGOPEN 所傳回的值。
其他有趣之指令
PGBBUF 與 PGEBUF
緩衝區功能。把眾多繪圖動作夾在 PGBBUF 與 PGEBUF 之間,能大幅提昇繪圖效率。
編譯與鏈結
在計算物理實驗室現行的安裝設定下,在存放你自已程式(在此以 pgdemo1.f 為例)的目錄下打:
f77 -o pgdemo1.x -nobackshash -L/usr/X11R6/lib -lX11 -lpgplot pgdemo1.f
其中 -nobackslash 參數是為了讓圖的標題文字可以顯示上標(次方),這在 pgplot 中要用到反斜線 "\" 符號,在有些 compiler 會詮釋反斜線符號有特定意義,但在此只是 pgplot 的副程式�媕Y要用,因此指定 no back-slash。
如果你沒有管理者權限,則你的 libpgplot.a (或 .so) 檔不會在系統公共目錄�堙C這時要鏈結 pgplot 副程式庫則需要在 -lpgplot 參數的前面給路徑 -L/NFS_home/u12345678/pgplot 。
線上手冊
官方網站使用說明:http://www.astro.caltech.edu/~tjp/pgplot/contents.html
範例程式
這�堶惘釩雃h且重要的功能示範,有多種繪圖的形態。其中 EX01 的平面作圖示範是最基本的,一定要會。
示範色塊、字型、記號的活用以及線寬、線型的變化
各類型等高線的繪製
色譜(調色板)示範
支援以滑鼠在平面上取得點的位置以供輸入數據的功能
與上示範類似,但更增加即時自按鍵讀入字元的功能
示範隱藏線的繪圖功能
這個程式提供了一個工具副程式,它能把一個 3D 的面投影在 2D 平面上。
畫素圖檔的示範
不同部分圖之背景色也以改變
動畫示範及比較
以 PGPAP 改變圖框的大小(非常實用)
可使用雙重的 device,並且其中一個可以作為選單的示範。同一張圖也可以包含多個小圖。
在圖上提供一個可以編輯輸入參數的欄位給程式
產生圖之時間、日期以及使用者之資訊的印出
各類長條圖
示範 3D 幾何物件之轉動
應用範例程式
staticel.f(電力線自動展示程式,需叫用亂數產生器副程式 ran3.f)