C/C++ 懶人筆記 003 – PGPlot 範例程式與簡介

簡介

PGPLOT 是繪圖函式庫,有 FORTRAN 與 C 版本,其實 C 的編譯的最後還是去連結Fortran 的動態檔。


編譯

  1. 需引入header檔 #include <cpgplot.h>
  2. 先以 gcc –c *.c 來做編譯跟彙編,後面可能會需要自己加入路徑引數 -I/usr/local/pgplot
  3. 再以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說明書。按照上方的範例就可以嘗試來畫出你要的圖形,用到高深處還可以偵測滑鼠的座標,並藉此達成互動式的繪圖輸出。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料