现在我正在通过c中的一个管道将一个文件传递给gnuplot,类似于以下内容:
fprintf(gnuplotPipe, "plot "data-file.dat" using 1:2n");
有没有什么方法可以让我不必将数据写入文件,然后将其传递给gnuplot,例如,以某种方式将数组或流传递给gnyplot,这样我就可以跳过写入文件的过程,然后删除文件?如有任何帮助,我们将不胜感激。
当然可以。绘制由一条线连接的两个点的终端命令的示例是:
echo "plot "< echo -e '4 5n 3 2'" w lp pt 2" | gnuplot
如果你想有postscript输出,你可以添加以下内容:
echo "set terminal postscript; plot "< echo -e '4 5n 3 2'" w lp pt 2" | gnuplot &> out.ps
如果现在使用system()或popen()(捕获输出流),那么剩下的应该很简单。
编辑:似乎存在一些C(++)-Gnuplot接口。看看这个网站,它对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 %gn", data_x[i], data_y[i]);
fclose(f);