Guida rapida all'uso di Gnuplot

Autore: Carlo Meneghini

Gnuplot è programma che può essere utilizzato come calcolatrice grafica, per la presentazione di dati per il raffinamento dei dati mediante metodi di regressione non lineare.
E' un programma che esiste per qualunque piattaforma (Linux, Windows, Unix, MacOs, ...).
Le istruzioni possono essere date in modo interativo, usando una interfaccio comandi o usando script. In Windows l'interfaccia contiene pulsanti e menu a tendina per semplificare l'utilizzo.
Permette di salvare i grafici in diversi formati, utili per la presentazione e la pubblicazione.

Link utili
Generalità
Impostazioni
Grafici di funzioni Grafica di dati
Funzioni Script
Top

Generalità

Installazione

Top
Sui sistemi Linux e MacOs è generalmente istallato di default. Per sistemi Windows scaricare il file con la versione aggiornata dal sito ufficiale: gpXXXwin32.zip (XXX= codice dell'ultima versione), scompattare il file in una directory a scelta. Copiare sul desktop un link al programma wgnuplot.exe (nella sottocartella bin o binary della distribuzione). Attenzione: se si sposta il programma wgnuplot.exe fuori della cartella predefinita si perde l'uso dei pulsanti e menu.
Gnuplot è dotato di un help completo e dettagliato che può essere invocato mediante il comando help. Attenzione, per le versioni antecedenti la 4.60, su sistemi Windows a partire da Vista, l'help file (.hlp) non funziona di default. In questo caso seguire le istruzioni per l'istallazione (richiede una versione originale di Windows). Altrimenti istallare una versione 4.6 o successiva.
Digitando un comando incompleto vengono visualizzate le diverse opzioni possibili. Ad es.:
gnuplot>  set term
mostra le diverse scelte disponibili per il terminale grafico. In ogni caso digitando:
gnuplot>  help comando 
si attiva la finestra di help (dipende dal sistema operativo in uso)
Top

Start

Su sistemi Linux, Unix e MacOs si può iniziare digitando semplicemente il comando

gnuplot 
in una finestra del temrinale. Per i sistemi Windows basta un doppio clik sul link o sul programma.

Una volta attivato bisogna spostarsi nella directory di lavoro. Nei sistemi Windows questo può essere fatto usando il pulsante ChDir. Nei sistemi Linux (Unix) è più semplice attivare il programma direttamente dalla directory di lavoro.
In ogni caso ci si può spostare nelle directories usando il comando:

gnuplot>  !cd 'percorso'
dove con percorso si indica il path della directory di destinazione es.:
gnuplot>  !cd '..'
sposta in alto la directory di lavoro

Il comando:

gnuplot> test 
apre una finestra grafica e mostra un test delle possibilità grafiche.

Le versioni recenti di Gnuplot attivano la finestra grafica in modo wxt. Questo è un terminale multipiattaforma (valido per sistemi Windowws e Linux) ma non lo trovo ancora molto efficace per Windows (soprattutto W7 e Vista). In tal caso è meglio cambiare terminale digitando, come primo comando:

gnuplot> set term win 
Per verificare il tipo di terminale in uso digitare:
gnuplot> show term 
Per consentire l'uso di un set esteso di caratteri usare l'opzione enhanced:
gnuplot> set term win enhanced
Terminal type set to 'windows'
Options are 'color enhanced font "Arial, 10"'          

Le istruzioni possono essere date come script: ovvero un file di tipo ASCII (testo) in cui le istruzioni (le stesse che si possono fornire sull'interfaccia) sono inserite in modo sequenziale. Lo script si richiama mediante il comando load. Ad esempio se lo script è salvato nel file ASCII: script.plt il comando:

gnuplot> load 'script.plt'
provoca l'esecuzione delle istruzioni dello script.

Le istruzioni necessarie per generare il grafico corrente si possono salvare in un file script che può essere richiamato e modificato a piacere. Per salvare le istruzioni si usa il comando save:

gnuplot> save "nomefile.plt"
L'estensione per il file script è arbitraria. Trattandosi di file di tipo testo (ASCII) in sistemi Windows può essere comodo usare l'estensione .txt in modo da essere automaticamente aperto usando notepad o altro editor testuale.
Nei file script il carattere # indica una linea di commento, il carattere \ indica che il comando prosegue alla linea successiva. Attenzione il carattere \ deve essere l'ultimo delle linea (non seguito da spazi ma solo da Return-Enter) altrimenti viene segnalato un errore.

Impostazioni

Top
Alcune impostazioni di uso frequente per la grafica di dati e funzioni sono:
gnuplot> set xlabel "asse x"                  # etichetta dell'asse x
gnuplot> set xlabel "asse y"                  # etichetta dell'asse y
gnuplot> set title "titolo"                   # titolo del grafico
gnuplot> set xrange [0:5]                     # intervallo x in questo caso 0-5
gnuplot> set yrange [0:5]                     # intervallo y in questo caso 0-5
gnuplot> set autoscale                        # calcolo automatico intervallo 
gnuplot> unset key                            # disabilita la legenda
gnuplot> set key top left                     # riposiziona la legenda in alto a sinistra
                                              # altre opzioni: top|bottom right|left

Grafici

Top
Per creare un grafico è sufficiente digitare il comando plot (o abbreviato pl) seguito dalla funzione da graficare:
gnuplot> plot sin(x)   # crea un grafico della funzione seno

La variabile x è la variabile indipendente per grafici 2D. Per grafici 3D si usano 'x' e 'y' come variabili indipendenti e il comando splot (abbreviato sp):

gnuplot> plot sin(x*y)   # crea un grafico 3D della funzione seno(x*y)

Per visualizzare grafici di più funzioni (o dati) nella stessa finestra utlizza la virgola:

gnuplot> plot sin(x), cos(x)

In alcuni terminali, utilizzando il tasto destro del Mouse, è possibile effettuare uno zoom nella finestra grafica. Il taso a sulla tastiera ripristina la visione intera del grafico.

Per cambiare l'intervallo mostrato si usa:

gnuplot> plot [xmin:xmax][ymin:ymax] sin(x)
i valori omessi sono calcolati per default

Definizione di funzioni

Top
La definizione di funzioni usa una sintassi simile al linguaggio Fortran/C. Oltre agli operatori aritmetici: * + - / ** , sono disponibili una serie di operatori e funzioni predefinite il cui elenco si può visualizzare digitando:
gnuplot> help functions
gnuplot> help operators
Mentre l'uso delle singole funzioni si trova digitando:
gnuplot> help functions funzione 

E' possibile utilizzare Gnuplot come calcolatrice usando il comando print (abbreviato pr):

gnuplot> pr 3.5*sqrt(2)
4.94974746830583
esegue il calcolo dell'espressione che segue e ne stampa il risultato.
Nota: le operazioni tra numeri interi troncano la parte decimale, quindi 3/2 = 1. Per effettuare operazioni in virgola mobile specificare almeno un numero come reale:3./2 = 1.5.

E' possibile definire le proprie funzioni:

gnuplot> f(x)=((x+a)*(x-a)/b)+d*exp(-x**2)
gnuplot> a=1.; b=3.; d = 2.
Nella definizione delle costanti il punto e virgola (;) è l'equivalente dell'andata a capo.

la funzione f(x) (o altro nome) può essere graficata usanto il comando plot (o abbreviato pl):

gnuplot> pl f(x)
o calcolata in un punto x specifico usando il comando print (pr
gnuplot> pr f(5.2)
8.68000000000361

Le funzioni possono essere definite ed utilizzate in modo parametrico:

gnuplot> f(x,a,b,d)=((x+a)*(x-a)/b)+d*exp(-x**2)
gnuplot> pl f(x,1.,3.,2.)
gnuplot> pr f(5.2,1.,3.,2.)
8.68000000000361

Nota per il calcolo

Top
Utilizzando numeri interi (senza virgola) il programma assume di dover eseguire operazioni senza cifre decimali (troncamento):
gnuplot> print 3/2
1                             # parte intera
gnuplot> print 2/3.0
1.5                          # risultato corretto
Pertanto è bene inserire almeno un numero con il '.' nelle operazioni per evitare erroi di calcolo (a meno che non si vogli esplicitamente calcolare operazioni tra interi).

Grafica di dati sperimentali

Top
Le funzione plot seguita dal nome del file permette di graficare i dati contenuti in un file di tipo testo (ASCII):
gnuplot> plot "file_dati.txt"
gnuplot> plot "file_dati1.txt", "file_dati2.txt"
Per graficare più files si usa la virgola. Il nome dei files deve essere racchiuso tra apici o doppi apici.

I dati devono essere salvati in colonne in un file di tipo testo (ASCII). Le colonne sono generalmente separate da spazi o tab. Il carattere # indica una linea di commento e non viene considerata nel grafico.

# dati acquisiti
#misura  altezza, lunghezza 
1        12.5     3.4
2         9.3     8.7
3        15.6     9.1
4        ...      ...
Le prime due righe non sono considerate.

Se il file contiene dati suddivisi in più colonne si può specificare quali colonne usare mediante il modificatoe using (abbreviato u):

gnuplot> pl 'file.txt' using 1:3
grafica le colonne 1 (asse x) e 3 (asse y).
Omettendo il comando using vengono graficate di default le colonne 1 e 2.

Si possono attuare cambi di variabili utilizzando espressioni algebriche e funzioni (racchiuse tra parentesi tonte) in cui le colonne sono indicate dal numero della colonna preceduto dal simbolo $:

gnuplot> pl 'file.txt' using ($1**2):3    # usa come ascissa il quadrato dei valori in prima colonna
gnuplot> pl 'file.txt' using 1:(sin($1))  # usa come ordinata il seno dell'ascissa
gnuplot> pl 'file.txt' using 1:(log($2))  # grafica il logaritmo naturale dei dati in colonna 2

Grafica di dati con barrre d'errore usando l'opzione with errorbars (eventualmente abbreviata).

gnuplot> pl 'file.txt' u 1:2:3 w error    # usa i valori della colonna 3 come errore sulle ordinate (y)
gnuplot> pl 'file.txt' u 1:2:(sqrt($2))   # usa come errore sulle ordinate la radice quadrata dei valori y 
gnuplot> pl 'file.txt' u 1:2:3 w xerror   # usa i valori della colonna 3 come errore sulle ascisse (x) 
altre opzioni per le barre di errore sono: xerrorbars, yerrorbars, xyerrorbars (barre d'errore su x e y)

Per cambiare l'etichetta dei dati si usa il modificatore t 'testo'

gnuplot> pl 'file.txt' using 1:2 t'colonna 2'  # nel caso di dati
gnuplot> pl f(x)                 t'funzione'   # per funzioni
il comando t'' rimuove l'etichetta.

Per cambiare lo stile del grafico si usa il modificatore with (abbreviato w)

gnuplot> pl 'file.txt' using 1:2 t'colonna 2' w p(oints) pt 1 # punti di tipo (pt= point type) 1
gnuplot> pl 'file.txt' using 1:2 t'colonna 2' w l(ines)  lt 2 # linea di tipo (lt= line type)  2
gnuplot> pl 'file.txt' using 1:2 t'colonna 2' w linesp  lt 4 pt 2   # linee di tipo 4 e punti di tipo 2
gnuplot> pl f(x) w l lt 1                                     # linea di tipo 1

Nelle versioni antecedenti la 4.60, digitando i comandi

gnuplot> pl 'file.txt' w 
gnuplot> pl f(x)       w    
vengono fornite le diverse opzioni possibili per lo stile. Le opzioni sono visibi anche digitando il comendo test.

Script utili

Top
Istruzioni: copiare lo script in un file di testo. Modificarlo secondo le proprie necessità, salvare il file e utilizzare il comando load per eseguire i comandi.

Definizione e grafico di una funzione

Top
#definisce il terminale
set term win

# definizione dei titoli per gli assi e per il grafico
set title  "titolo del grafico"
set xlabel "Ascisse [u.m.]"
set ylabel "Ordinate [u.m.]" 

# definizione della funzione 
f(x) = a * sin(b*x) * exp(-x/c) + d*x**2
 
# valori delle costanti
a=1.5; b=4.5; c=2.; d=0.45; 

# grafica
pl [:][:] f(x) t 'f(x)' w l lt 2  #grafico come linea di tipo 2

Rappresentazione di dati

Top
#definisce il terminale
set term win

#definizione dei titoli per il grafico
set title "titolo del grfico"
set xlabel "Ascisse [u.m.]"
set ylabel "Ordinate [u.m.]" 


# grafica
pl [:][:] 'file.dat' u 1:2 t 'dat' w points

# file.dat = nome del file. usare il simbolo # per le linee di commento
# 
# u 1:2    = colonne da usare
# 
# t 'dat'  = etichetta dei dati
#
# w p 3    = definisce lo stile del plot: punti di tipo 3
#

Istogrammi di frequenza

Top
l'opzione smooth frequency (vedi help smooth frequency) rende i dati monotoni in x, quindi sostituisce al valore y(x) il valore ottenuto sommando tutti i valori y(x) con la stessa ascissa. Può essere usata per calcolare e rappresentare istogrammi di frequenze relative o assolute.
l'opzione smooth cumulative (vedi help smooth cumulative) rende i dati monotoni in x. I punti con la stessa ascissa sono sostituiti con la somma dei valori y(x) con ascissa minore o uguale a x. Quindi può essere usata per ottenere la distribuzione di frequenze cumulative (relative o assolute) dei dati.
Di seguito sono riportati alcuni script utili per la creazione di istrogrammi. Salvare gli script in un file testo. Modificare gli script, salvarli e utilizzarli mediante il comando load.

Frequenze assolute/relative
# definisce la funzione classe che assegna 
#    ad x il valore della classe corrispondente:
# a = ampiezza delle classi
# 
# il termine a/2. definise l'ascissa al centro della classe 
#
classe(x, a) = a*int(x/a) + a/2.

#definisce la larghezza della classe
a = 2.

# larghezza colonne per l'istogramma
set boxwidth a

set title  " Titolo del grafico "
set xlabel " asse ascisse [u.m.]"
set ylabel " Frequenze "

# numero totale di punti 
# se Nt = 1 frequenze assolute
# per frequenze relative inserire il numero di dati
Nt = 1

#grafico

plot [:][:]  'dati.txt' u (classe($2,a)):(1./Nt) smooth frequency t '' w boxes
Nell'esempio si assumono i dati in colonna 2. Se non è il vostro caso sostituire il numero della colonna contenente i dati in:
u (classe($2,a)):(1./Nt)

Frequenze assolute/relative
Per il grafico delle frequenze cumulative sostituire il comando di plot con:

plot [:][:]  'dati.txt' u (classe($2,a)):(1./Nt) smooth cumulative t '' w linesp
Come sopra si assumono i dati in colonna 2. Se non è il vostro caso sostituire il numero della colonna contenente i dati.

Frequenze e Frequenze cumulative
Per graficare insieme le frequenze e le frequenze cumulative sostituire il comando di plot con:

plot [:][:]  'dati.txt' u (classe($2,a)):(1./Nt) smooth cumulative t '' w linesp,\
'dati.txt' u (classe($2,a)):(1./Nt) smooth frequency t '' w linesp
Come sopra si assumono i dati in colonna 2. Se non è il vostro caso sostituire il numero della colonna contenente i dati.
Ricordarsi di non lasciare spezi dopo il simbolo \ (backslash).
Per graficare i dati relativi definire Nt come il numero di dati.

C, Meneghini home