[C/C++] Calling Gnuplot in C

  • 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還比較快。

2 comments:

  1. 晁銓4:12 PM

    您好~我是彰化師大研究生晁銓 想跟您請教有關程式語言的問題~不知道是否方便^^
    因為最近研究遇到瓶頸~本身我用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 畫出

    不好意思 我的問題有點冗長 希望有空可以幫我解答~

    ReplyDelete
  2. Hello, 我blog上提供的是最古老的方法,如果沒有必要其實你可以將資料分析跟繪圖分開來做。程式部份專門做資料的處理然後存檔,再來另行呼叫gnuplot來繪圖即可(這部份你可以手動,也可以藉由batch file來完成)。當然如果你想要讓這些步驟一氣呵成,你可以直接使用我上面提到的指令system()就可以了。一個簡單的原始碼範例如下:
    #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的線上文件。

    ReplyDelete

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas