Gnuplot e LaTeX: la semplicità a portata di mano

Come anticipato da quest'articolo, vediamo com'è semplice usare Gnuplot.

Da una shell digitiamo:


gnuplot

per entrare nella shell interattiva di Gnuplot.


set terminal NOME_TERMINALE

serve per impostare il tipo di output da generare. Di default c'è x11, ma si possono scegliere tra varie opzioni, ciascuna con i suoi argomenti. Esiste, infatti, la possibilità di creare file jpeg, png, postscript ecc. L'help in linea


help COMANDO

sarà di sicuro un valido aiuto per ottenere le informazioni desiderate.
Interessante è la possibilità di scegliere latex per ottenere il codice da includere in un documento LaTeX.


set output "NOME_FILE"

permette di salvare l'output di Gnuplot nel file specificato.


set key

attiva la legenda in alto a destra, salvo diverse indicazioni di posizione. Infatti, aggiungendo left, bottom, right o una coordinata, è possibile farla comparire dove si desidera.
Se non la si vuole visualizzare, invece, basterà specificarlo tramite


unset key

Le etichette della legenda vengono generate automaticamente, salvo diverse indicazioni che si effettuano tramite degli argomenti del comando


plot

che serve per disegnare grafici 2D.

Per impostare la griglia su entrambi gli assi, non presente di default, si usa il comando


set grid

e


unset grid

la elimina.

A questo punto è evidente come il comando


set COMANDO

serve per impostare COMANDO, mentre


unset COMANDO

serve per riportare Gnuplot a lavorare nelle condizioni precedenti all'utilizzo di COMANDO.

Tramite


set ASSErange [INIZIO:FINE]

è possibile impostare il range dell'asse specificato al posto di ASSE (x, y ecc), che, altrimenti, è definito in automatico da Gnuplot. Se al posto di numeri vengono inseriti degli * come INIZIO e FINE, allora si ripristina l'autoscala.


set logscale ASSE BASE

permette di impostare la scala logaritmica per l'asse indicato oppure per tutti se non si specifica nulla. La base del logaritmo è di default 10.


set format ASSE "FORMATO"

imposta il formato dell'asse specificato (o di entrambi se omesso), che di default è "%g" (cioè Gnuplot visualizza i numeri nel formato più corto tra l'esponenziale, "%e", e la virgola mobile, "%f"). Se, per esempio, si vuole visualizzare in formato esponenziale con una cifra prima della virgola e due dopo, basterà usare


"%1.2e"

analogamente per gli altri formati possibili.


set title "TITOLO"

definisce il titolo del grafico. Anche qui sono possibili molteplici opzioni come colore, grandezza, font, posizione ecc.


set ASSElabel "NOME"

imposta l'etichetta dell'asse specificato.

Se si è scelto l'output grafico in LaTeX è possibile ruotare verticalmente il testo dell'asse y che, altrimenti, risulterebbe orizzontale, con l'accortezza di aggiungere il comando per ruotare di 90 gradi l'etichetta.


set ylabel "\\rotatebox{90}{NOME}">

La specifica


\\rotatebox{}{}

è un comando LaTeX che verrà poi interpretato durante la compilazione del file .tex. Sono necessarie due \, in quanto una sola verrebbe interpretata da Gnuplot come un suo comando e on comparirebbe nell'output per LaTeX. Essa infatti serve per spezzare un comando su più righe.


plot "NOME_FILE_DATI" title "ETICHETTA LEGENDA" using NUM1:NUM2 with STILE

permette di creare il grafico a partire dai dati contenuti nel file NOME_FILE_DATI, usando le colonne NUM1 e NUM2, utilizzando un certo stile e con una specifica etichetta per la legenda. Queste opzioni sono, ovviamente, solo alcune delle possibili.

Il file contenente i dati dovrà contenere almeno una colonna, la quale corrisponderà all'asse delle ordinate. In caso di due colonne, la prima sarà associata all'asse x e la seconda all'asse y. In questi due casi il parametro using non sarà necessario.
Se si hanno più serie di dati da visualizzare sullo stesso grafico, esse possono essere organizzate in due modi: mettendo le due serie di dati in successione, separate da una riga bianca, oppure impostando il file dati come una matrice.
Nel primo caso il file apparirà come segue


#PRIMA SERIE
1 1
2 2
3 3
4 4
5 5

#SECONDA SERIE
2 4
3 6
4 8
5 10

dove le righe precedute dal # saranno interpetate come dei commenti da parte di Gnuplot.


plot "NOME_FILE.dat"

plotterà due linee corrispondenti alle due serie di dati.
Nel secondo caso, invece, il file apparirà così:


1 1 2 4
2 2 3 6
3 3 4 8
4 4 5 10
5 5

e usando lo stesso comando di prima per plottare, potremmo vedere visualizzata solo la prima serie di dati in quanto è come se ci fossero solo le prime due colonne di dati.
Per visualizzare le due serie dovremmo indicarle tramite il comando using NUM1:NUM2 ovvero:


plot "NOME_FILE.dat" using 1:2, "NOME_FILE.dat" using 3:4

separando con una virgola le serie di dati che vogliamo graficare. Con il primo pezzo indichiamo di usare la colonna 1 come ascissa e la 2 come ordinata, con il secondo diciamo di assumere la colonna 3 come x e la 4 come y. Ovviamente potremmo anche avere un'unica colonna delle ascisse nel nostro file dati e più colonne per l'asse y, l'importante è specificare correttamente "cosa corrisponde a quale asse" con il comando plot. È possibile anche graficare serie di dati provenienti da file dati diversi: basta indicare correttamente i due nomi.

Se si vuole interpolare una serie di dati, esiste il comando fit. Innanzitutto si può definire il tipo di funzione su cui fare l'interpolazione:


f(x) = a*x + b

se si desidera un andamento lineare,


f(x) = a* exp (x/b)

per un'esponenziale ecc.


fit f(x) 'NOME_FILE' via a,b

permette a Gnuplot di interpolare i dati contenuti nel file NOME_FILE precedentemente creato da noi per mezzo dei parametri a e b che verranno calcolati e comunicati a video e in un file fit.


plot f(x)

realizzerà un grafico con l'interpolazione così ottenuta.

Se non si desidera digitare volta per volta tutta questa serie di comandi dal prompt di comando, è possibile salvare il tutto in un file da mandare in esecuzione tramite


load 'NOME_FILE'

Oppure, senza entrare nel prompt di Gnuplot, è possibile digitare


gnuplot "NOME_FILE"

per far eseguire da Gnuplot il contenuto di NOME_FILE, ma se non si è impostato di salvare l'output esso viene aperto e automaticamente chiuso, perché l'ambiente di Gnuplot si chiude con l'ultimo comando del file.

Da notare che, quasi in ogni caso, l'utilizzo degli apici o delle virgolette è indeferrente per GNUplot.

Digitando:


set terminal jpeg medium size 640,480
set output "seno.jpeg"
unset key
plot [x=-pi:+pi] sin(x)

# Nota: In questo caso il comando plot genera la funzione seno da meno a più pi greco. Costanti come pi greco sono già conosciute da Gnuplot e quindi basta richiamarle col loro nome.

otterremo questo file di output:

Se abbiamo creato il file dati.dat con i valori scritti prima, salvando in un file prova il seguente codice:


set terminal jpeg medium size 640,480
set output "daFile.jpeg"
set key left
plot "dati.dat" using 1:2 title "serie uno" with linespoints 1, "dati.dat" u 3:4 t "serie due" w lp 2
# using può essere abbreviato con il comando u
# title con t
# with con w
# linespoints con lp

otterremo, invece, questo risultato:


set terminal latex
set output "daFile.tex"
set key left
plot "dati.dat" u 1:2 t "serie uno" w lp 1, "dati.dat" u 3:4 t "serie due" w lp 2

permette di ottenere il file daFile.tex col seguente codice


% GNUPLOT: LaTeX picture
\setlength{\unitlength}{0.240900pt}
\ifx\plotpoint\undefined\newsavebox{\plotpoint}\fi
\sbox{\plotpoint}{\rule[-0.200pt]{0.400pt}{0.400pt}}%
\begin{picture}(1500,900)(0,0)
\sbox{\plotpoint}{\rule[-0.200pt]{0.400pt}{0.400pt}}%
\put(120.0,82.0){\rule[-0.200pt]{4.818pt}{0.400pt}}

...

\end{picture}

Questo file può essere usato in un documento LaTeX, dopo aver aggiunto, nel preambolo del file .tex, i seguenti pacchetti


\usepackage{graphicx}
\usepackage{latexsym}

Mentre il semplice:


\input{PERCORSO\FILE}

permetterà di inserire il file generato da Gnuplot.

Il file che si ottiene con queste impostazioni non presenta la possibilità di usare i colori, perché per LaTeX non è prevista quest'opzione, quindi Gnuplot non inserirà informazioni a riguardo nell'output.
Bisogna quindi passare all'utilizzo di una macro di LaTeX, con:


set terminal eepic

Nel preambolo del file LaTeX dovranno essere inserite le seguenti righe:


\usepackage{eepic,epic,eepicemu}
\usepackage{color}

E' necessario avere i giusti pacchetti installati. Si può scaricare da qui il file zip di eepic. Per installarlo è necessario copiare nella directory di LaTeX contenente tutti i file sty (/usr/share/texmf-texlive/tex/latex per me, per esempio) e aggiornare l'ambiente LaTeX con il comando:


texhash

Tuttavia l'uso di questa macro, alquanto datata (i riferimenti sono tutti precedenti al 2000), va bene con un buon lettore di dvi per non incorrere in risultati "strani".

Beh, buon lavoro a tutti! :)

ciao, ho bisogno di un aiuto: quando copio il file, salvato in .tex di un fit di una serie di dati, su un file latex e lo compilo, vedo che il fit, ad esempio lineare, non è una linea ma bensì tantissimi puntini non continui, ho bisogno di un comando che mi faccia vedere su latex un fit continuo con una linea...aiutoo!!!

Immaginando che tu stia usando gnuplot per ottenere un grafico con output in tex, devi dire a gnuplot di disegnare una linea al posto di una serie di punti. Con il comando plot basta usare "w l" (with lines) come parametro.

Aggiungi un commento
by Realizzazione Siti Vicenza & Temi per Drupal
Creative Commons License | Privacy & Cookie Policy