从 C 中使用 gnuplot
Posted
技术标签:
【中文标题】从 C 中使用 gnuplot【英文标题】:Using gnuplot from C 【发布时间】:2017-12-03 23:32:30 【问题描述】:我一直在尝试使用 C 程序中的 GNUplot 绘制一些东西。我现在刚刚从这个问题的答案中获取了一个代码:Making C code plot a graph automatically
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
#define NUM_POINTS 5
void main()
double xvals[NUM_POINTS] = 1.0, 2.0, 3.0, 4.0, 5.0;
double yvals[NUM_POINTS] = 5.0 ,3.0, 1.0, 3.0, 5.0;
/*Opens an interface that one can use to send commands as if they were typing into the
* gnuplot command line. "The -persistent" keeps the plot open even after your
* C program terminates.
*/
FILE * gnuplotPipe = _popen ("gnuplot -persistent", "w");
fprintf(gnuplotPipe, "plot '-' \n");
int i;
for (int i = 0; i < NUM_POINTS; i++)
fprintf(gnuplotPipe, "%g %g\n", xvals[i], yvals[i]);
fprintf(gnuplotPipe, "e\n");
fflush(gnuplotPipe);
fclose(gnuplotPipe);
我正在使用 Cygwin 运行它。问题是情节出现了(我看到它非常短暂地闪烁。)但没有“持续”在屏幕上。
我尝试过使用 popen 而不是 _popen。并尝试使用 pause -1 。 我不确定缺少什么/错误。将第 15 行中的“persistent”更改为“persist”也不起作用。任何帮助将不胜感激。
提前致谢! :)
【问题讨论】:
当您直接从 Cygwin 终端使用gnuplot
时会发生什么情况,即在终端类型 gnuplot
然后 plot sin(x)
?显示正确吗?
上面写着unable to open display ' '
然后,你需要安装Cygwin/X
。见https://x.cygwin.com/docs/ug/setup.html
我安装了链接提到的软件包。仍然显示相同的东西:(
安装后,需要启动它:在同一文档的下一页,https://x.cygwin.com/docs/ug/using.html。
【参考方案1】:
你需要在 fclose(gnuplotPipe); 之前做一个 getch()这样,您的 c 程序将在关闭 gnuplot 管道之前暂停,从而关闭 gnuplot 窗口。
其他一些可能会有所帮助的注意事项: 您可以在此处找到有关如何执行此操作的大量示例:https://sourceforge.net/projects/gnuplotc/。 我发现使用 Windows Gnuplot 比使用 cygwin 版本更容易(您仍然可以从使用 cygwin/gcc 编译的程序中进行管道传输)。很久以前我做过比较,所以我不记得具体原因了。
干杯, 约翰
【讨论】:
以上是关于从 C 中使用 gnuplot的主要内容,如果未能解决你的问题,请参考以下文章
从使用 numpy.save(...) 保存的文件中将 numpy 数组加载到 C 中