2012-03-01 75 views
6

現在我傳遞一個文件通過AA管GNUPLOT在C,是這樣的:傳遞數據數組通過管道GNUPLOT在C,而不是一個文件

fprintf(gnuplotPipe, "plot \"data-file.dat\" using 1:2\n"); 

有什麼辦法,我不要不必將數據寫入文件,然後將其傳遞給gnuplot,例如以某種方式將數組或數據流傳遞給gnuplot,因此我可以跳過寫入文件進程然後刪除文件?任何幫助,將不勝感激。

回答

4

當然你可以做到這一點。繪出由線連接的兩個點的終端的命令的一個例子是:

echo "plot \"< echo -e '4 5\n 3 2'\" w lp pt 2" | gnuplot 

如果要具有PostScript輸出可以添加以下內容:

echo "set terminal postscript; plot \"< echo -e '4 5\n 3 2'\" w lp pt 2" | gnuplot &> out.ps 

如果現在使用的系統()或popen()(以捕獲輸出流),其餘的應該很簡單。

編輯:似乎存在一些C(++) - Gnuplot接口。查看this website,它可以很好地概述C,C++,Python和Fortran包裝。我不確定他們是否是最新的並且使用最新的Gnuplot版本,但是如果不適應不應該那麼困難。

+0

感謝您的答覆,我不知道爲什麼,雖然我需要趕上輸出,也許我沒有看到你說的話,圖形會在繪圖命令後自動出現。 – mihajlv 2012-03-01 22:08:24

+0

可選,以防您計劃做的不僅僅是查看數據。對於簡單的繪圖系統將會很好。 – Azrael3000 2012-03-01 22:21:15

+0

聽起來不錯,我會嘗試你的答案,我將不得不將數組轉換爲一個巨大的字符數組猜測你的答案,所以我可以通過它的gnuplot,除非我可以以某種方式直接傳遞數組(雙打)本身到gnuplot ? – mihajlv 2012-03-01 22:35:24

0

Gnuplot理解文件名' - '表示即將到來的數據。因此,爲了削減從什麼,我做什麼工作的上粘貼:

FILE *f = popen("gnuplot", "w"); 

fprintf(f, "set term png; " 
"set out 'beforeafter.png'\n" 
"set xlabel 'before'\n" 
"set ylabel 'after'\n" 
"plot '-'\n"); 

//Am using Apophenia in my project, so use its print function to print the data 
apop_data_print(dataset, .output_pipe=f); 

//or use fprintf directly 
for (int i=0; i< data_len; i++) 
    fprintf(f, "%g %g\n", data_x[i], data_y[i]); 

fclose(f); 
相關問題