Gnuplot - Salvar resultado

2

Eu crio um gráfico que muda a cada segundo usando o gnuplot. Agora, eu quero salvar este gráfico como gif ou arquivo png quando meu programa terminar. Como eu posso fazer? Meu código C está abaixo

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
}
    
por us2956 17.12.2014 / 00:38

1 resposta

1

Eu não entrarei na parte c (que parece realmente C ++) --- você apenas tem que enviar o comando correto para gnuplot .

A alteração do formato de saída é chamada de terminal de mudança no gnuplot.

Por exemplo, para gerar um arquivo PNG, em gnuplot :

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

... irá gerar o gráfico em um arquivo chamado filename.png . Lembre-se de voltar ao seu terminal (ou usar outra instância de gnuplot ) com algo no estilo de

set term wxt persist 

antes de plotar novamente.

Você tem muitas informações em 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.

Existem terminais para gerar bitmap em muitos formatos: basta olhar para

help set term jpeg
help set term gif

No modo gif , você pode até gerar um gif animado. Veja:

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

... e você tem em test.gif :

    
por Rmano 27.02.2015 / 18:40