Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过c中的管道而不是文件将数据数组传递给gnuplot_C_File_Stream_Pipe_Gnuplot - Fatal编程技术网

通过c中的管道而不是文件将数据数组传递给gnuplot

通过c中的管道而不是文件将数据数组传递给gnuplot,c,file,stream,pipe,gnuplot,C,File,Stream,Pipe,Gnuplot,现在,我正在通过c中的a管道将一个文件传递给gnuplot,如下所示: fprintf(gnuplotPipe, "plot \"data-file.dat\" using 1:2\n"); 有没有一种方法,我不必将数据写入文件,然后将其传递给gnuplot,例如,以某种方式将数组或流传递给gnuplot,这样我就可以跳过写入文件的过程,然后删除该文件?如果您有任何帮助,我们将不胜感激。您一定能做到。绘制由直线连接的两点的端子命令示例如下: echo "plot \"< echo -

现在,我正在通过c中的a管道将一个文件传递给gnuplot,如下所示:

 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
echo“plot\”
如果希望有postscript输出,可以添加以下内容:

echo "set terminal postscript; plot \"< echo -e '4 5\n 3 2'\" w lp pt 2" | gnuplot &> out.ps
echo“设置终端postscript;绘图\”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 %g\n", data_x[i], data_y[i]);

fclose(f);
FILE*f=popen(“gnuplot”,“w”);
fprintf(f,“设置术语png
“设置'beforefafter.png'\n”
“将xlabel设置在'\n'之前”
“将ylabel设置在'\n'之后”
“绘图'-'\n”);
//我在我的项目中使用Apophenia,所以使用它的打印功能来打印数据
apop_数据_打印(数据集,.output_管道=f);
//或者直接使用fprintf
对于(int i=0;i
感谢您的回复,我不确定为什么需要捕捉输出,可能我看不到您在说什么,图形会在plot命令后自动显示。如果您计划做的不仅仅是查看数据,则可以选择此选项。简单的绘图系统就可以了。听起来不错,我会试试你的答案,我必须根据你的答案将数组转换成一个巨大的字符数组,这样我就可以将它传递给gnuplot,除非我可以直接将数组(双倍数)本身传递给gnuplot?我稍微更新了我的答案,提供了一个快速搜索后出现的链接。