Передать аргумент в конфигурационный файл GNUPLOT - PullRequest
0 голосов
/ 28 декабря 2018

Вот мой конфигурационный файл 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 голосов
/ 30 декабря 2018

вы можете просто установить переменную, содержащую имя файла:

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
0 голосов
/ 28 декабря 2018

Нечто подобное позволяет вам иметь полный контроль над тем, что вам нужно (извините, быстро и грязно, код только для 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).

...