現在我傳遞一個文件通過AA管GNUPLOT在C,是這樣的:傳遞數據數組通過管道GNUPLOT在C,而不是一個文件
fprintf(gnuplotPipe, "plot \"data-file.dat\" using 1:2\n");
有什麼辦法,我不要不必將數據寫入文件,然後將其傳遞給gnuplot,例如以某種方式將數組或數據流傳遞給gnuplot,因此我可以跳過寫入文件進程然後刪除文件?任何幫助,將不勝感激。
現在我傳遞一個文件通過AA管GNUPLOT在C,是這樣的:傳遞數據數組通過管道GNUPLOT在C,而不是一個文件
fprintf(gnuplotPipe, "plot \"data-file.dat\" using 1:2\n");
有什麼辦法,我不要不必將數據寫入文件,然後將其傳遞給gnuplot,例如以某種方式將數組或數據流傳遞給gnuplot,因此我可以跳過寫入文件進程然後刪除文件?任何幫助,將不勝感激。
當然你可以做到這一點。繪出由線連接的兩個點的終端的命令的一個例子是:
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版本,但是如果不適應不應該那麼困難。
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);
感謝您的答覆,我不知道爲什麼,雖然我需要趕上輸出,也許我沒有看到你說的話,圖形會在繪圖命令後自動出現。 – mihajlv 2012-03-01 22:08:24
可選,以防您計劃做的不僅僅是查看數據。對於簡單的繪圖系統將會很好。 – Azrael3000 2012-03-01 22:21:15
聽起來不錯,我會嘗試你的答案,我將不得不將數組轉換爲一個巨大的字符數組猜測你的答案,所以我可以通過它的gnuplot,除非我可以以某種方式直接傳遞數組(雙打)本身到gnuplot ? – mihajlv 2012-03-01 22:35:24