我正在尝试从我的c ++程序在gnuplot中实时绘制我的图形。我已经安装了gnuplot 4.6并且能够打开gnuplot.exe并绘制graphs.But我无法通过管道打开应用程序。这是我用过的代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* gp;
char *path = "C:\Program Files\gnuplot\bin\wgnuplot";
#ifdef WIN32
gp = _popen("gnuplot -persist", "w");
#else
gp = _popen(path, "w");
#endif
if (gp == NULL)
return -1;
fprintf(gp, "set isosample 100\n");
fprintf(gp, "min=-1\n");
fprintf(gp, "max=1\n");
fprintf(gp, "pi=3.141592\n");
fprintf(gp, "set hidden3d\n");
fprintf(gp, "set pm3d\n");
fprintf(gp, "set contour\n");
fprintf(gp, "splot [min:max] [min:max] x*x+2*y*y-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7\n");
fprintf(gp, "pause -1\n");
return 0;
}
我已设置环境变量,但我收到以下错误。 c:程序\不被识别为内部或外部命令和可操作程序或批处理文件..
我尝试使用相同的路径运行exe。但它没有打开。是因为cmd提示符中可以给出的字符串的最大长度..
请提出宝贵的建议。
由于
答案 0 :(得分:1)
必须对反斜杠路径分隔符进行转义(或用斜杠替换):
char *path = "C:\\Program Files\\gnuplot\\bin\\wgnuplot";
答案 1 :(得分:1)
而不是使用char * path,你应该将_popen函数写为
gp = _popen(“E:\\ myprograms \\ ProgramFiles \\ libraries \\ Gnuplot \\ bin \\ gnuplot -persist”,“w”);
并可能通过这种方式调用相应的数据数据文件
fprintf(gp,“splot \”C:\\\\ Users \\\\ username \\\\ Documents \\\\ Visual Studio 2012 \\\\ Projects \\\\ laplace equation \\\\ laplace.dat \ “\ n”);
答案 2 :(得分:0)
您可以使用gnuplot-cpp绘制图表。
这个小片段解决了你的问题(test1.cpp):
#include "gnuplot_i.hpp"
int main()
{
Gnuplot gp;
gp.cmd("set isosample 100\n");
gp.cmd("min=-1\n");
gp.cmd("max=1\n");
gp.cmd("pi=3.141592\n");
gp.cmd("set hidden3d\n");
gp.cmd("set pm3d\n");
gp.cmd("set contour\n");
gp.cmd("splot [min:max] [min:max] x*x+2*y*y-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7\n");
gp.cmd("pause -1\n");
std::cout << std::endl << "Press ENTER to continue..." << std::endl;
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
std::cin.get();
return 0;
}
使用
在Linux上编译并执行此应用程序g++ test1.cpp && ./a.out