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
}
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
: