将参数传递给GNUPLOT配置文件

时间:2018-12-28 16:18:21

标签: c++ gnuplot

这是我的gnuplot配置文件:

reset
set terminal png
set output "rp.png"
set title textcolor rgb "red" "R/P"
set yrange[0:110]
set xrange[0:110]
set xlabel "Rappel"
set ylabel "Précision"
set style data points
plot "test.dat" using 2:1 with linespoints

我希望能够在“ test.dat”的最后一行替换为“ filename”之类的东西,其中将传递“ filename”。

目前我只是做这个

FILE *gp;
 if(WIN32)
 {
   cout<<"Win 32"<<endl;

   gp=_popen("gnuplot", "w");
 }
 else
 {
   cout<<"pas win 32"<<endl;
   gp=popen("gnuplot", "w");
 }
 if(gp == NULL)
 {
   fprintf(stderr, "Oops, I can't find %s.");
   //exit(EXIT_FAILURE);
 }
 fprintf(gp, "load \"config\"\n");
 fflush(gp); 
 pclose(gp);

但是我不知道如何传递参数...

提前谢谢

2 个答案:

答案 0 :(得分:0)

通过这种方式,您可以完全控制所需的内容(抱歉,快速而肮脏,仅适用于Linux的代码):

#include <iostream>
#include <fstream>
#include <cstdlib>

int main()
{
   std::ofstream f("myfile.plt");
   f << "#!/usr/local/bin/gnuplot\n";
   f << "reset\nset terminal pngcairo\n";
   //... the rest of what is needed
   std::string fn = "whatever.dat";
   f << "plot \"" << fn << "\" using 2:1 with linespoints\n";
   f.close();
   std::system( "chmod u+x myfile.plt" );
   std::system( "myfile.plt" );
}

(切换到pngcairo终端,比png产生更好的输出)。

答案 1 :(得分:0)

您可以设置一个包含文件名的变量:

fprintf(gp, "filename=\"%s\";load \"config\"\n", file_name);

,然后在您的Gnuplot脚本中重复使用它:

reset
set terminal png
set output "rp.png"
set title textcolor rgb "red" "R/P"
set yrange[0:110]
set xrange[0:110]
set xlabel "Rappel"
set ylabel "Précision"
set style data points
plot filename using 2:1 with linespoints