从 gnuplot 获取变量到 C++

Get variables from gnuplot to c++

我正在用 c++ 编写代码,使用 gnuplot 绘制数据集,我意识到如果我可以从 gnuplot 获取变量到我的 c++ 代码,我可以大大简化我的代码。例如如果我做了一个合适的 f 并得到他的统计数据,即

f(x)=a*x+b
fit f 'data.txt' via a,b
stats 'data.txt' u (f()):2 name 'Sf'

有什么方法可以获取 Sf_records 并将其保存到我的代码中的变量中吗?喜欢 int N = Rf_records?

感谢您的帮助

假设您通过 FIFOgnuplot 通信,您可以命令 gnuplot

print <variable>

您可以将此读入您的 c++ 程序。

例如。用于读取变量:

double getVal(std::string val){
  
  float ret;
  std::string str;
  
  str="print "; str+=val;str+="\n";
  
  fprintf(gp, str.c_str());
  fflush(gp);
  
  fscanf(gpin, "%f", &ret);
  
  return ret;
}

开一个gnuplotFIFO

void connecttognuplot(){
  
    //make an unique FIFO
    std::stringstream alma; alma.str(std::string()); alma<<std::clock(); GPFIFO="./gpio"+alma.str();
  
    //gnuplot => program FIFO
    if (mkfifo(GPFIFO.c_str(), 0600)) {
    if (errno != EEXIST) {
        perror(GPFIFO.c_str());
        unlink(GPFIFO.c_str());
    }
    }
    // For fprintf
    if (NULL == (gp = popen("gnuplot 2> /tmp/gp1","w"))) {
    perror("gnuplot");
    pclose(gp);
    }

    //  Redirect print
    fprintf(gp, "set print \"%s\";\n", GPFIFO.c_str());
    fflush(gp);

    // For fscanf
    if (NULL == (gpin = fopen(GPFIFO.c_str(),"r"))) {
    perror(GPFIFO.c_str());
    pclose(gp);
    }
  
  }