从 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
?
感谢您的帮助
假设您通过 FIFO
与 gnuplot
通信,您可以命令 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;
}
开一个gnuplot
FIFO
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);
}
}
我正在用 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
?
感谢您的帮助
假设您通过 FIFO
与 gnuplot
通信,您可以命令 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;
}
开一个gnuplot
FIFO
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);
}
}