C/C++ 懶人筆記 003 – PGPlot 範例程式與簡介
簡介
PGPLOT 是繪圖函式庫,有 FORTRAN 與 C 版本,其實 C 的編譯的最後還是去連結Fortran 的動態檔。
編譯
- 需引入header檔 #include <cpgplot.h>
- 先以 gcc –c *.c 來做編譯跟彙編,後面可能會需要自己加入路徑引數 -I/usr/local/pgplot
- 再以g77 -o *.exe *.o 來連結,後面可能會需要引數 -L/usr/local/pgplot -lcpgplot –lpgplot -L/usr/lib64 -lX11 -lcfitsio –lm ,或是用gfortran -o *.exe *.o來連結。
以上編譯方法可以寫在Makefile裡面,比較方便,例如
PGLIB = -L/usr/local/pgplot -lcpgplot -lpgplot PGDIR = /usr/local/pgplot X11LIB = -L/usr/lib64 -lX11 plot: plot.o gfortran -o plot.exe plot.o $(PGLIB) $(X11LIB) -lcfitsio -lm plot.o: gcc -g -c plot.c -I$(PGDIR) clean: rm *.o *.exe
範例
#include <math.h> #include <cpgplot.h> #include <stdio.h> int main() { ... 其他程式內容 ... cpgbeg(0, “Plot.ps/cps”, 1, 1); //產生一個繪圖 cpgsvp( 0.1, 0.9, 0.1, 0.9 ); //繪圖的四個邊界,這是相對值 cpgswin( Xmin, Xmax, Ymin, Ymax );// 輸出的XY座標數值範圍 cpgbox( "BCTN", 0.0, 0, "BCNSTV", 0.0, 0 ); //這行不用修改 cpgtext( 50, Ymax*0.8 , "\\m17 symbol" ); //符號說明要擺在哪 cpglab( xtitle, ytitle, alltitle); // 標題 cpgsci(1); //顏色控制 cpgpt( dataNO, x, y, 17 );// 畫點狀的圖形,17是符號的代碼 cpgsci(3); cpgline(dataNO , x, y); // 用綠色畫折線圖 cpgend(); //結束這個繪圖 ... 其他程式內容 ... return 0; }
這個範例假設前面準備好了 x 與 y 兩個float陣列,裡面存好了要畫的圖形,x存放x軸的數值,y存放y軸的數值,dataNO就是資料點的數量。
- cpgbeg(0, “Plot.ps/cps”, 1, 1); 其中Plot.ps是輸出檔名,而cps是輸出格式代表輸出彩色的postscript檔,如果只要在彈出視窗上顯示,可以寫”/xw”。
- cpgswin( Xmin, Xmax, Ymin, Ymax );這是設定輸出的XY座標數值範圍,例如X軸是從0到100000不等,那Xmin=0 Xmax=10000,例如Y的數值從0到65535不等,則可以設定Ymin=0 Ymax=65535,當然,你可以設定的大一點,這樣輸出的圖形看起來會比較清楚些。
- cpgsci(1);用來控制顏色,你可以把標題、繪圖點、繪圖線、符號說明全部賦予不同顏色,0白1黑2紅3綠4藍…一直到15號,詳情可查閱pgplot說明書。按照上方的範例就可以嘗試來畫出你要的圖形,用到高深處還可以偵測滑鼠的座標,並藉此達成互動式的繪圖輸出。
Leave a Reply