web-dev-qa-db-fra.com

Gnuplot - Sauvegarder le résultat

Je crée un graphique qui change chaque seconde à l'aide de gnuplot.Maintenant, je souhaite enregistrer ce graphique au format gif ou png à la fin de mon programme. Comment puis-je faire? Mon code C est en dessous

FILE *pipe = popen("gnuplot -persist", "w");

// set axis ranges
fprintf(pipe,"set xrange [0:11]\n");
fprintf(pipe,"set yrange [0:]\n");
int b = 5;int a;
// to make 10 points
std::vector<int> x (10, 0.0); // x values
std::vector<int> y (10, 0.0); // y values
for (a=0;a<5;a++) // 10 plots
{
    x[a] = a;
    y[a] = 2*a;// some function of a
    fprintf(pipe,"plot '-'\n");
    // 1 additional data point per plot
    for (int ii = 0; ii <= a; ii++) {
        fprintf(pipe, "%d %d\n", x[ii], y[ii]); // plot `a` points
    }

    fprintf(pipe,"e\n");    // finally, e
    fflush(pipe);   // flush the pipe to update the plot
    usleep(1000000);// wait a second before updating again
}
2
us2956

Je ne vais pas entrer dans la partie c (qui semble vraiment C++) - il vous suffit d’envoyer la commande correcte à gnuplot.

Changer le format de sortie s'appelle changer de terminal dans gnuplot.

Par exemple, pour générer un fichier PNG, dans gnuplot:

[...instruction to make youtr graph...]
set term pngcairo
set output "filename.png"
replot
set output 

... générera le graphique dans un fichier nommé filename.png. N'oubliez pas de revenir sur votre terminal (ou d'utiliser une autre instance de gnuplot) avec quelque chose du style

set term wxt persist 

avant de tracer à nouveau.

Vous avez beaucoup d'informations dans help set term pngcairo:

gnuplot> help set term pngcairo
 The `pngcairo` terminal device generates output in png. The actual
 drawing is done via cairo, a 2D graphics library, and pango, a library for
 laying out and rendering text.

 Syntax:
         set term pngcairo
                      {{no}enhanced} {mono|color} {solid|dashed}
                      {{no}transparent} {{no}crop} {background <rgbcolor>
                      {font <font>} {fontscale <scale>}
                      {linewidth <lw>} {rounded|butt} {dashlength <dl>}
                      {size <XX>{unit},<YY>{unit}}

 This terminal supports an enhanced text mode, which allows font and other
 formatting commands (subscripts, superscripts, etc.) to be embedded in labels
 and other text strings. The enhanced text mode syntax is shared with other
 gnuplot terminal types. See `enhanced` for more details.

Il existe des terminaux pour générer des images bitmap dans de nombreux formats: il suffit de regarder

help set term jpeg
help set term gif

Dans le mode gif, vous pouvez même générer un gif animé. Voir:

gnuplot> set term gif animate
Terminal type set to 'gif'
Options are 'nocrop font "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf,12" fontscale 1.0 animate delay 10 loop 0 nooptimize size 640,480 '
gnuplot> set output "test.gif"
gnuplot> plot sin(x)
gnuplot> plot sin(x-1)
gnuplot> plot sin(x-2)
gnuplot> plot sin(x-3)
gnuplot> plot sin(x-4)
gnuplot> plot sin(x-5)
gnuplot> set output 
End of animation sequence

... et vous avez dans test.gif:

Animated gif of sin(x)

1
Rmano