- Calling Gnuplot in C
Download:callGnuPlot.c
懶惰是程式設計師的天性,所以才會創造出許多方便的程式,最近一直需要作圖分析,厭倦了Origin重複且繁複的設定,所以決定將要分析的資料使用c做分析後再由gnuplot畫出。
熟悉gnuplot的人都知道我們可以將常用的指令寫在一個檔案上,然後只需需要讀取那個檔案就可以畫出我們設定好的樣子(如同matlab的m file)。透過這樣的特性我們可以直接使用system("gnuplot 'script'");的形式來呼叫gnuplot畫圖。這裡我介紹一個比較傳統方式的呼叫,使用mkstemp(), popen()等函式來完成。
使用mkstemp來幫我們自動產生暫存用的檔案,這裡我們分別要畫sin(x),cos(x),但是我們只需要宣告一個檔案即可,因為gnuplot有一些方便的指令在讀取資料時以各個column為基準。
輸出的圖形圖下:
PS. 以上只是個範例,如果你的圖形是可以用方程式給精準地表示出來的,那就不用上面的麻煩方式,你大可直接使用octave,scilab還比較快。
您好~我是彰化師大研究生晁銓 想跟您請教有關程式語言的問題~不知道是否方便^^
ReplyDelete因為最近研究遇到瓶頸~本身我用c++寫程式,想把c++裡的兩個矩陣的數據,一個為X軸數據,一個為Y軸數據,用gunplot畫出x-y圖,有上網查一些資料,發現在http://phi.sinica.edu.tw/aspac/reports/94/94002/plot-b.html
網站中要求在unix下才能呼叫
自己疑問因本身電腦為windows xp系統 不知是否也可用
而其他疑問是不知如何在c++中去呼叫gnuplot
要先把檔案寫成TXT檔
EX
1 3
2 4
3 4
4 6
去呼叫 可是不知如何呼叫畫出
還是直接可以在C++程式中把矩陣的數據傳道gnuplot 畫出
不好意思 我的問題有點冗長 希望有空可以幫我解答~
Hello, 我blog上提供的是最古老的方法,如果沒有必要其實你可以將資料分析跟繪圖分開來做。程式部份專門做資料的處理然後存檔,再來另行呼叫gnuplot來繪圖即可(這部份你可以手動,也可以藉由batch file來完成)。當然如果你想要讓這些步驟一氣呵成,你可以直接使用我上面提到的指令system()就可以了。一個簡單的原始碼範例如下:
ReplyDelete#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int i = 0;
fstream fileout;
fileout.open("data.dat", fstream::out);
do{ fileout<< i << " " << i*i << endl;
}while(i++ < 10);
fileout.close();
system("wgnuplot script.wgp");
return EXIT_SUCCESS;
}
程式先將10筆資料寫入到data.dat之後,再由system()指令呼叫wgnuplot script.wgp繪圖。
其中wgnuplot就是windows底下的gnuplot,你可以從gnuplot官方下載到。而script.wgp則是使用者自行建立的script檔,範例如下:
plot 'data.dat' with lines lc 1 lw 2
pause -1
其餘詳細部份請參考gnuplot的線上文件。