Gnuplot per tutti Carlo Carminati Dipartimento di Matematica Università di Pisa 27 ottobre 2012 Che cos’è gnuplot? Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Le funzionalità di gnuplot comprendono: Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Le funzionalità di gnuplot comprendono: I visualizzazione di dati sperimentali (scattered plot); Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Le funzionalità di gnuplot comprendono: I visualizzazione di dati sperimentali (scattered plot); I analisi statistiche; Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Le funzionalità di gnuplot comprendono: I visualizzazione di dati sperimentali (scattered plot); I analisi statistiche; I grafici di funzione in 2D o 3D; Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Le funzionalità di gnuplot comprendono: I visualizzazione di dati sperimentali (scattered plot); I analisi statistiche; I grafici di funzione in 2D o 3D; I produzione di filmati. Che cos’è gnuplot? È uno strumento finalizzato all’analisi grafica dei dati. Le funzionalità di gnuplot comprendono: I visualizzazione di dati sperimentali (scattered plot); I analisi statistiche; I grafici di funzione in 2D o 3D; I produzione di filmati. Perché usare gnuplot? Perché usare gnuplot? I è facile; Perché usare gnuplot? I è facile; I è veloce; Perché usare gnuplot? I è facile; I è veloce; I è libero Perché usare gnuplot? I è facile; I è veloce; I è libero PS: gnuplot isn’t GNU! Perché usare gnuplot? I è facile; I è veloce; I è libero PS: gnuplot isn’t GNU! (ma è pur sempre open source). Modi d’uso I produzione veloce di grafici usa-e-getta; Modi d’uso I produzione veloce di grafici usa-e-getta; I produzione di grafici che intendiamo conservare (ed utilizzare in futuro); Modi d’uso I produzione veloce di grafici usa-e-getta; I produzione di grafici che intendiamo conservare (ed utilizzare in futuro); I produzione di grafici di alta qualitá, da stampare. Grafici 2D Grafici 2D Scattered plots Scattered plots Fit di dati sperimentali Fit di dati sperimentali Grafici di funzioni in due variabili. Grafici di funzioni in due variabili. Superfici parametriche Multiplot Figure incapsulate Multiplot Curve di Lissajous Primi passi con gnuplot Primi passi con gnuplot Primi passi con gnuplot Grafico di sin x, sull’intervallo [0, 2π]. Grafico di sin x, sull’intervallo [0, 2π]. Grafico di sin x, sull’intervallo [0, 2π]. Campionamento. Campionamento. Campionamento. Campionamento. Campionamento. Campionamento. Campionamento. Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output I finestra grafica (default); Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output I finestra grafica (default); I file grafico (eps, jpg, pdf,...), p.es. Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output I finestra grafica (default); I file grafico (eps, jpg, pdf,...), p.es. set term postscript, set output ‘‘nomefile.eps’’ Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output I finestra grafica (default); I file grafico (eps, jpg, pdf,...), p.es. set term postscript, set output ‘‘nomefile.eps’’ I file di dati, p.es. set table ‘‘nomefile.dat’’ Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output I finestra grafica (default); I file grafico (eps, jpg, pdf,...), p.es. set term postscript, set output ‘‘nomefile.eps’’ I file di dati, p.es. set table ‘‘nomefile.dat’’ I stampante; Input ed output Input I Dati calcolati da gnuplot, p.es: plot sin(x) I Dati presi da un file, p.es. plot ‘‘entropy.dat’’ u 1:3 with dots I Input dinamico, p.es. plot ‘‘< wget -O - http://db.tt/Ps9PgmT3’’ Output I finestra grafica (default); I file grafico (eps, jpg, pdf,...), p.es. set term postscript, set output ‘‘nomefile.eps’’ I file di dati, p.es. set table ‘‘nomefile.dat’’ I stampante; I dumb terminal (es: set terminal dumb ;-) Interazione dinamica È possibile interagire dinamicamente con gnuplot tramite il mouse e tastiera: ESEMPIO Script gnuplot La creazione di una immagine di qualità è il risultato di numerose prove. Script gnuplot La creazione di una immagine di qualità è il risultato di numerose prove. Per visualizzare i dati in maniera ottimale è necessario configurare un certo numero di opzioni, e non è in genere evidente in principio quale sia la scelta ottimale. Script gnuplot La creazione di una immagine di qualità è il risultato di numerose prove. Per visualizzare i dati in maniera ottimale è necessario configurare un certo numero di opzioni, e non è in genere evidente in principio quale sia la scelta ottimale. È quindi consigliabile raggruppare istruzioni e comandi in uno script gnuplot che possiamo eseguire, e al quale potremo in seguito apportare modifiche per migliorare la resa grafica. Un esempio Scriviamo nel file taylor.gp le seguenti istruzioni: Un esempio Scriviamo nel file taylor.gp le seguenti istruzioni: set set set set set size ratio -1 # scala fissa su x e y xzeroaxis yzeroaxis xrange [-2*pi:2*pi] yrange [-2:2] Un esempio Scriviamo nel file taylor.gp le seguenti istruzioni: set set set set set size ratio -1 # scala fissa su x e y xzeroaxis yzeroaxis xrange [-2*pi:2*pi] yrange [-2:2] f1(x)=x # pol. di taylor f3(x)=x-x**3/6 f5(x)=x-x**3/6+x**5/120 Un esempio Scriviamo nel file taylor.gp le seguenti istruzioni: set set set set set size ratio -1 # scala fissa su x e y xzeroaxis yzeroaxis xrange [-2*pi:2*pi] yrange [-2:2] f1(x)=x # pol. di taylor f3(x)=x-x**3/6 f5(x)=x-x**3/6+x**5/120 plot f1(x) lt 3 t "",\ f3(x) lt 3 t "",\ f5(x) lt 3 t "",\ sin(x) lt 1 t "" Esecuzione Ci sono due modi di eseguire il nostro script: Esecuzione Ci sono due modi di eseguire il nostro script: I avviare gnuplot, e dare il comando load ‘‘taylor.gp’’ Esecuzione Ci sono due modi di eseguire il nostro script: I avviare gnuplot, e dare il comando load ‘‘taylor.gp’’ I direttamente dalla shell, mediante il comando gnuplot -persist taylor.gp Esecuzione Ci sono due modi di eseguire il nostro script: I avviare gnuplot, e dare il comando load ‘‘taylor.gp’’ I direttamente dalla shell, mediante il comando gnuplot -persist taylor.gp in ogni caso il risultato sarà il seguente: Animazioni I Con gli script gnuplot posso generare delle animazioni, vediamo come. Animazioni I Con gli script gnuplot posso generare delle animazioni, vediamo come. Creo dei files di dati che chiamo sample1.dat, sample2.dat, sample3.dat, ... Mentre nello script animazione.gp dò i comandi: Animazioni I Con gli script gnuplot posso generare delle animazioni, vediamo come. Creo dei files di dati che chiamo sample1.dat, sample2.dat, sample3.dat, ... Mentre nello script animazione.gp dò i comandi: nome=’’sample’’.b.’’.dat’’ plot nome w lines t ‘‘n=’’.b pause .1 # attende .1’ b=b+1 # incrementa b reread # rilegge questo file Ora avvio gnuplot e dò i comandi b=1, load ‘‘animazione.gp’’ Animazioni II Generare un’animazione col metodo appena visto è semplice, ma presenta anche alcune controindicazioni: Animazioni II Generare un’animazione col metodo appena visto è semplice, ma presenta anche alcune controindicazioni: :-( se i file da visualizzare sono complessi (i.e. contengono molti punti) le immagini scorrono troppo lentamente; Animazioni II Generare un’animazione col metodo appena visto è semplice, ma presenta anche alcune controindicazioni: :-( se i file da visualizzare sono complessi (i.e. contengono molti punti) le immagini scorrono troppo lentamente; :-( non è possibile bloccare il filmato su una particolare inquadratura, né è possibile tornare indietro (se non ricominciando da capo). Animazioni II Generare un’animazione col metodo appena visto è semplice, ma presenta anche alcune controindicazioni: :-( se i file da visualizzare sono complessi (i.e. contengono molti punti) le immagini scorrono troppo lentamente; :-( non è possibile bloccare il filmato su una particolare inquadratura, né è possibile tornare indietro (se non ricominciando da capo). Un modo per ovviare a questo inconveniente è il seguente: I lanciare uno script gnuplot che generi files .jpg contenenti i grafici che ci interessano (in genere un filmato potrà contenere qualche centinaio di frames) Animazioni II Generare un’animazione col metodo appena visto è semplice, ma presenta anche alcune controindicazioni: :-( se i file da visualizzare sono complessi (i.e. contengono molti punti) le immagini scorrono troppo lentamente; :-( non è possibile bloccare il filmato su una particolare inquadratura, né è possibile tornare indietro (se non ricominciando da capo). Un modo per ovviare a questo inconveniente è il seguente: I lanciare uno script gnuplot che generi files .jpg contenenti i grafici che ci interessano (in genere un filmato potrà contenere qualche centinaio di frames) I interlacciare le immagini .jpg con mmencoder in modo da formare un filmato Animazioni II Generare un’animazione col metodo appena visto è semplice, ma presenta anche alcune controindicazioni: :-( se i file da visualizzare sono complessi (i.e. contengono molti punti) le immagini scorrono troppo lentamente; :-( non è possibile bloccare il filmato su una particolare inquadratura, né è possibile tornare indietro (se non ricominciando da capo). Un modo per ovviare a questo inconveniente è il seguente: I lanciare uno script gnuplot che generi files .jpg contenenti i grafici che ci interessano (in genere un filmato potrà contenere qualche centinaio di frames) I interlacciare le immagini .jpg con mmencoder in modo da formare un filmato Fare un film, praticamente Basta modificare lo script animazione.gp cosı́: Fare un film, praticamente Basta modificare lo script animazione.gp cosı́: nome=’’sample’’.b.’’.dat’’ # def input fileout=’’frame’’.b.’’.jpg’’ # def output set term jpeg # format=jpeg set output fileout # output=fileout plot nome with lines t ‘‘n=’’.b pause .1 # attende .1’ b=b+1 # incrementa b reread # rilegge questo file Fare un film, praticamente Basta modificare lo script animazione.gp cosı́: nome=’’sample’’.b.’’.dat’’ # def input fileout=’’frame’’.b.’’.jpg’’ # def output set term jpeg # format=jpeg set output fileout # output=fileout plot nome with lines t ‘‘n=’’.b pause .1 # attende .1’ b=b+1 # incrementa b reread # rilegge questo file Questo script produce i fotogrammi sample1.dat, sample2.dat, sample3.dat,... Interlacciare files .jpg A questo punto non ci rimane che interlacciare i files .jpeg, e questo possiamo farlo col comando mmencoder (che fa parte del pacchetto di mplayer): Interlacciare files .jpg A questo punto non ci rimane che interlacciare i files .jpeg, e questo possiamo farlo col comando mmencoder (che fa parte del pacchetto di mplayer): mencoder mf://@list.txt -mf w=800:h=600:fps=15:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o film.avi Interlacciare files .jpg A questo punto non ci rimane che interlacciare i files .jpeg, e questo possiamo farlo col comando mmencoder (che fa parte del pacchetto di mplayer): mencoder mf://@list.txt -mf w=800:h=600:fps=15:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o film.avi dove list.txt é un file che contiene i nomi dei files jpeg che si vogliono concatenare Interlacciare files .jpg A questo punto non ci rimane che interlacciare i files .jpeg, e questo possiamo farlo col comando mmencoder (che fa parte del pacchetto di mplayer): mencoder mf://@list.txt -mf w=800:h=600:fps=15:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o film.avi dove list.txt é un file che contiene i nomi dei files jpeg che si vogliono concatenare la velocitá é di 15 frame al secondo (fps) Interlacciare files .jpg A questo punto non ci rimane che interlacciare i files .jpeg, e questo possiamo farlo col comando mmencoder (che fa parte del pacchetto di mplayer): mencoder mf://@list.txt -mf w=800:h=600:fps=15:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o film.avi dove list.txt é un file che contiene i nomi dei files jpeg che si vogliono concatenare la velocitá é di 15 frame al secondo (fps) il file prodotto si chiama film.avi Interlacciare files .jpg A questo punto non ci rimane che interlacciare i files .jpeg, e questo possiamo farlo col comando mmencoder (che fa parte del pacchetto di mplayer): mencoder mf://@list.txt -mf w=800:h=600:fps=15:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o film.avi dove list.txt é un file che contiene i nomi dei files jpeg che si vogliono concatenare la velocitá é di 15 frame al secondo (fps) il file prodotto si chiama film.avi (e il resto sono opzioni che non ci interessano). Bibliografia essenziale Oltre alla documentazione ufficiale (http://www.gnuplot.info/) sono molto utili i seguenti riferimenti: Bibliografia essenziale Oltre alla documentazione ufficiale (http://www.gnuplot.info/) sono molto utili i seguenti riferimenti: I GNUPLOT 4.2 - A Brief Manual and Tutorial di H.P. Gavin www.duke.edu/˜hpgavin/gnuplot.html Bibliografia essenziale Oltre alla documentazione ufficiale (http://www.gnuplot.info/) sono molto utili i seguenti riferimenti: I GNUPLOT 4.2 - A Brief Manual and Tutorial di H.P. Gavin www.duke.edu/˜hpgavin/gnuplot.html I not so FAQ di T. Kawano t16web.lanl.gov/Kawano/gnuplot/index-e.html Bibliografia essenziale Oltre alla documentazione ufficiale (http://www.gnuplot.info/) sono molto utili i seguenti riferimenti: I GNUPLOT 4.2 - A Brief Manual and Tutorial di H.P. Gavin www.duke.edu/˜hpgavin/gnuplot.html I not so FAQ di T. Kawano t16web.lanl.gov/Kawano/gnuplot/index-e.html I Gnuplot in Action di P.K. Janert Manning Publications Co. www.manning.com/janert/