Primi passi con gnuplot

Informatica

gnuplot

Introduzione

Ho scritto questo documento la prima volta per accompagnare una copia di gnuplot per Windows che stavo per dare a un mio collega che cercava un programma che potesse agevolargli la generazione di molti grafici di dati, in vista di una scadenza per la consegna di una relazione di laboratorio.

Grafico di esempio creato con gnuplotbinary.2.png

La fonte di frustrazione che si incontra in casi come quello è avere davanti un ottimo programma con interfaccia grafica e magari molto intuitivo, ma che necessita che ripetiamo manualmente le solite 5-6 operazioni per tutti i grafici che vogliamo generare: un incubo se dobbiamo/vogliamo fare più di cinque-sei grafici!

Programmi come gnuplot, al contrario, avendo un'interfaccia testuale, ci permettono di lavorare sì interattivamente, ma anche di mettere i comandi che eseguiamo spesso in un file di testo (uno script) e di richiamarli, tutti insieme, al momento del bisogno, agevolando enormemente la realizzazione di compiti ripetitivi (non sono nati per questo i computer? ;-) ).
Un altro vantaggio notevole di gnuplot è che è un programma liberamente disponibile per (quasi) qualsiasi sistema operativo, e, soprattutto, produce grafici bi- e tri-dimensionali di qualità veramente ottima!

OK, forse ti ho incuriosito abbastanza... se lo vuoi provare puoi procurati gnuplot da gnuplot.info e continuare a leggere il tutorial!
Scusami solo se nel documento troverai un po' di gergo tecnico... Un'altra cosa che spero terrai a mente è che il tutorial èstato scritto inizialmente per un utente MS Windows: in generale, se si lavora in GNU/Linux alcune cose potrebbero andare diversamente, ma in questo caso sarai sicuramente abbastanza sveglio per sapere cosa fare!

Sommario

Installazione

In MS Windows, dopo che avrai scaricato il pacchetto *.zip, per usare il programma devi semplicemente decomprimere il file, indicando una directory di destinazione a tua scelta. Il programma non richiede nessuna installazione, puoi copiare i file dove ti pare, e quando non ti serve più, puoi cancellarlo impunemente.
In GNU/Linux gnuplot è quasi uno standard, e sarà sicuramente tra i pacchetti della tua distribuzione, segui le istruzioni generali della tua distro per installarlo.
Per tutti gli altri sistemi, seguite le istruzioni allegate al pacchetto (tanto li leggete sempre i file README, vero???).

Documentazione

Essendo gnuplot un programma testuale, all'avvio ci si presenta con un'amichevole riga di comando :-P, che aspetta ansiosamente che noi digitiamo qualche comando divertente.
Per farlo felice, e fargli fare qualche bel grafico, dovremo conoscere appena qualche semplice comando fondamentale, e dunque è necessario leggere qualche guida (come questo tutorial!) e tenere sotto mano la documentazione ufficiale per chiarire eventuali dubbi.

Grafico di esempio crato con gnuplotgnuplot-polar.9.png

Il programma ha un help in linea, che in Windows puoi leggere scegliendo "help" dal menù, o che puoi visualizzare digitando help sulla linea di comando. Per avere la pagina di aiuto su un particolare comando, digita help seguito dal nome del comando (es. help plot).
Sul sito di gnuplot trovi la Documentazione ufficiale in formato html o pdf, che puoi leggere on-line o stampare, mentre puoi trovare un'altro tutorial su gnuplot in italiano a questo indirizzo.

Esecuzione e uso

Se lavori in GNU/linux, apri un terminale, digita gnuplot, e salta al prossimo paragrafo (non vorrei insultare la tua intelligenza! ;-) ).
Se invece lavori in MS Windows, per lanciare il programma fai doppio click sull'icona gnuplot.exe nella cartella dove hai estratto i file. Ti si aprirà una amichevole interfaccia a riga di comando, potentissima. Riga di comando significa ovviamente che tu digiti i comandi e le istruzioni, premi invio, e succede qualcosa da qualche parte, più o meno visibile. Il bello di questa riga di comando, è che con i tasti freccia su e giù puoi riutilizzare i comandi precedenti (se le conosci, puoi usare le stesse combinazioni di tasti per l'editing della linea di comando in bash). Quando sarai stanco di lavorare, digita exit e il programma si chiude.

Definire funzioni e variabili

Le funzioni si definiscono con una sintassi simile a quella del C o del Fortran, in cui il + e il - indicano l'addizione e la sottrazione, il * e il / indicano la moltiplicazione e la divisione, e il doppio asterisco ** indica l'elevamento a potenza.
Per esempio, per definire una parabola, digita:

f(x)= a + b*x + c*x**2

e premi invio (la presenza degli spazi è ininfluente).
La variabile indipendente deve essere x, a meno che tu non la cambi esplicitamente con un apposito comando. Ovviamente puoi dare alla funzione il nome che vuoi (se non è già in uso), tipo g(x), h(x), pippo(x)...
Definita così la funzione, i parametri a, b, c sono ancora indeterminati. Se vuoi fare il grafico di una funzione specifica, dovrai aassegnare loro dei valori, scrivendo qualcosa del tipo:

a=1.2345

e premendo invio.
Puoi usare un bel po' di funzioni, nelle prime pagine della documentazione allegata c'è la lista delle funzioni supportate (che comunque hanno quasi lo stesso nome delle funzioni Fortran).
Il pi greco (π) è già definito come costante, la puoi richiamare con il nome: pi

Plottare una funzione

Definita la funzione, vorrai vedere com'è, cioè farne un grafico... digita allora il comando plot seguito dal nome della funzione che hai definito:

plot f(x)

Ogni volta che fai dei cambiamenti nelle impostazioni, non c'è un cambiamento istantaneo nel grafico: dovrai ripetere il comando plot per ricalcolare daccapo il grafico aggiornato.
In alternativa, puoi digitare il comando:

replot

per aggiornare il grafico precedente alle nuove impostazioni. Questo può essere utile se dopo aver fatto il grafico di una funzione con plot vuoi sovrapporre al grafico corrente un'altra funzione, diciamo g(x). Per fare questo basterà digitare:

replot g(x)

Il programma imposta automaticamente un intervallo (range) dell'asse delle ascisse (le x) e delle ordinate (le y) per mostrare la curva.
Se vuoi specificare un range specifico, per esempio per visualizzare l'andamento della curva per valori tra 1 e 7, digita:

set xrange [1:7]

E se lo vuoi fare anche per il range y, impostando un intervallo dell'asse tra lo zero e 12, digita:

set yrange [0:12]

Per tornare alla scala automatica, digita:

set autoscale

Qualche volta vogliamo mettere una griglia per rendere più ordinati i riferimenti. Per far questo digita:

set grid

Se hai cambiato idea, e la griglia non ti va pi, basta digitare: unset grid
Ricorda che il comando unset seguito dal parametro che vogliamo modificare di solito ci permette di disattivare una impostazione, allo stesso modo in cui set la attiva.
Ok, bisogna mettere anche qualche didascalia per gli assi:

set xlabel 'questo è un asse delle ascisse'
set ylabel 'e questo è un asse delle ordinate'

la didascalia che sarà visualizzata è il testo tra apici. A questo punto mettiamo anche un bel titolo:

set title 'titolo del grafico'

E il nostro grafico è completo.

Plottare un file di dati

Per richiamare un file, esso deve essere nella directory di lavoro, in gergo chiamata directory corrente (current directory).
Di solito la directory (cartella) corrente è quella da dove hai lanciato gnuplot; per vedere qual'è la cartella corrente digita:

pwd

Se il tuo file è in un altra cartella, puoi definire quella come cartella corrente, digitando (supponiamo che stai lavorando in MS Windows, e il tuo file sia nella cartella c:\documenti):

cd 'c:\documenti'

Per vedere se sei dove vuoi essere, digita di nuovo:

pwd

Questo ti conferma che C:\documenti è la cartella corrente.

I dati devono essere contenuti in un file di testo e ordinati in colonne (tutte quelle che vuoi), e tra un record e l'altro non devono esserci più di due righe vuote (un record è costituito dai dati su una riga).
Attenzione utenti Windows: i file scritti e modificati con MS Word NON sono file di testo semplice! Per questi scopi dovresti usare un editor di testo come il Blocco Note, o meglio ancora, procurarti e imparare a usare un editor serio come Vim o Emacs! Una alternativa più facile da usare potrebbe essere Notepad2.
Le righe che cominciano con il carattere # saranno ignorate da gnuplot permettendoci di aggiungere commenti, o indicare dei record di dati da escludere.
Attenzione: I numeri decimali devono essere scritti con il punto, e NON con la virgola!!!

Alla prima colonna gnuplot assegna il numero 1, alla seconda il numero 2, e così via, così quando vorrai fare il grafico di un file di dati, dovrai specificare quali colonne leggere.
Il comando per plottare un file di dati con in prima colonna le x, in seconda le y e in terza gli errori sulle y, è

plot 'nomefile.dat' using 1:2:3 with errorbars

il primo argomento del parametro using è il numero di colonna delle x, il secondo delle y e il terzo degli errori su y. Se non hai modificato manualmente il range, il grafico viene automaticamente ridimensionato per mostrare tutti i dati.
Per plottare più file di dati o funzioni simultaneamente, basta scrivere una cosa tipo:

plot f(x), 'file' using 1:2, g(x) 

ossia con gli oggetti da graficare separati da virgole.
I simboli che rappresentano i dati potrebbero sembrarti un po' grandi... puoi regolarne la dimensione assegnando a pointsize un valore più piccolo, per esempio 0.1:

set pointsize 0.1

dando replot puoi aggiornare il grafico e vedere l'effetto delle tue modifiche.

Fittare una funzione su un set di dati

Supponiamo che hai i tuoi bei dati e la tua bella legge f(x)e vuoi fare un bel fit pesato, per trovare quali valori bisogna assegnare ai parametri della tua funzione per fare in modo (o verificare) che approssimi i tuoi dati sperimentali.
Pur non essendo un programma di fitting, gnuplot puù farlo, per fare questo usa un metodo di fitting non lineare iterativo, il cui principio di funzionamento è documentato nel manuale ufficiale.
Ecco come fare:

  1. Definisci la funzione (puoi fittare funzioni qualsiasi), con i suoi parametri.
    f(x)=a*sin(x+b)+c
    
  2. Dai un valore iniziale sensato ai parametri che definiscono la tua funzione:
    a=1.2345
    b=2.3456
    c=3.4567
    
  3. Supponendo che i tuoi dati siano nel file chiamato dati.dat con le x in 1 colonna, le y in 2 e gli errori in y in 3, e che vuoi fittare i dati con la legge, facendo variare i parametri a, b, c, digita:
    fit f(x) 'dati.dat' using 1:2:3 via a,b,c
    
  4. Il computer comincerà a macinare numeri per un po', e alla fine ti darà una lista criptica di parametri che ha determinato. I più interessanti sono (in ordine di comparizione):
    • gradi di libertà [degrees of freedom (ndf)]
    • deviazione standard dei dati [rms of residuals (stdfit)]
    • Chi quadro ridotto [variance of residuals (reduced chisquare)]
    • Alla fine c'è la tabella con i parametri stimati, con i relativi errori (tipo sigma, ossia al 60%) con accanto gli errori relativi.
  5. Tutte queste cose vengono contemporaneamente scritte in append (cioè aggiunte in coda) nel file fit.log, contenuto nella directory corrente (questo file ha il vizio di diventare molto lungo... se c'è roba che non ti serve, cancellalo ogni tanto).
  6. Ora che sei contento perchè hai perché il fit, vorrai vedere il risultato delle tue fatiche... facciamo un bel plot digitando:
    plot 'dati.dat' using 1:2:3 with errorbars, f(x)
    
  7. Compiaciti di come sei bravo ad analizzare i dati sperimentali... ;-)

Stampare un grafico

Se sei in MS Windows c'è un modo semplice per stampare i grafici che hai appena creato: clicca nell'angolo in alto a destra della finestra del grafico (accanto alla scritta gnuplot graph), dal menù scegli Options -> Print, imposta le proprietà di stampa, e aggiusta i margini di stampa, per regolare le dimensioni del grafico in stampa.
Dai OK, e avrai una bella copia (si spera) del tuo grafico.

Il metodo citato è senz'altro il più rapido, ma è anche il meno flessibile (e non è utilizzabile in GNU/Linux): come la mettiamo se vuoi inserire il tuo grafico in una relazione come figura?
In questo caso dovrai esportare il grafico in un file, in un formato utilizzabile con il programma che userai per redigere la tua relazione.
Se lavori in GNU/Linux il formato da utilizzare sarà senz'altro postscript (soprattutto se intendi scrivere la relazione con LaTeX, prova anche il formato pslatex) mentre se lavori in MS Windows e intendi inserire la figura in un documento Word ;-( sarà forse meglio esportareil grafico in emf.

Ecco come fare: il formato, nel linguaggio di gnuplot, è detto terminale, mentre il file dove andrà disegnato il grafico è detto output.
Supponiamo allora di voler esportare il grafico fatto con il comando:

plot 'dati.dat' using 1:2:3 with errorbars, f(x)
Impostiamo prima il terminale da usare se lavoriamo in GNU/Linux...
set terminal postscript enhanced color
... o se lavoriamo in MS Windows:
set terminal emf color
Impostiamo poi il nome del file di output da usare:
set output "stampa.ps"
...se lavoriamo in Linux, altrimenti, se lavoriamo in Windows usiamo:
set output "stampa.emf"
A questo punto facciamogli scrivere il grafico sul nostro file:
replot
Chiudiamo il file di output (il file non viene scritto fino a quando non chiudiamo l'ouput):
set output

E ripristiniamo il terminale predefinito del nostro sistema, per tornare alla visualizzazione usuale in una finestra:

set terminal win

...in MS Windows. Mentre scriveremo:

set terminal x11

...in GNU/Linux.

A questo punto corri a vedere il tuo file di uscita, per verificare se è tutto a posto. In windows puoi visualizzare i file emf usando il programma freeware Irfanview, mentre saprai già che in GNU/Linux puoi visualizzare i file postscript con gv, kghostview, evince e simili.

Ovviamente ci sono molti altri comandi, switch, e altro per manipolare i grafici e i fit, oppure per ottenere grafici parametrici o tridimensionali, ma per un bel po' quello che ho scritto dovrebbe bastarti.
La possibilità più potente che non ho citato è che puoi scrivere un file di testo (chiamato ad es. "file.gpi") e mettere in ogni riga i comandi da passare al programma, e poi fargli eseguire le operazioni più ripetitive soltanto caricando il file con i comandi, scrivendo nel terminale qualcosa tipo:

load 'file.gpi'

Ora basta, se sei stato abbastanza coraggioso da leggere fino a qui, ti auguro buon lavoro e buon divertimento con gnuplot!

Riferimenti

Trackback URL for this post:

http://gerlos.altervista.org/trackback/87

commenti

ritratto di mavimo

Complimenti!

Complimenti buona guida, mi sta tornando utile nella fase di scrittura della tesi :)
Caso mai ti venisse voglia di approfondire alcune parti (per esempio l'esportazione di grafici da inserire in LaTeX) credo che mi tornerà ancora più utile :P

ritratto di gerlos

Re: Complimenti!

Grazie per i complimenti!
In effetti alcuni approfondimenti erano in cantiere da un po' visto che anch'io combatto con gnuplot e LaTex all'università.

Non credo che aggiungerò nulla a questa pagina, già abbastanza lunga e ricca di materiale per chi comincia, ma penso che preparerò una pagina più "avanzata".

Nel frattempo, il sito web di riferimento è certamente "Gnuplot (not so frequently sked questions)":
http://chaos.fiz.uni-lj.si/~horvat/publishing/gnuplot/Kawano/gnuplot/ind...

ciao ciao
gerlos

ritratto di Zanardi

complimenti

Oh, una buona giuda base per questo programma diabolico :-D

Grazie 1000!

ritratto di verox

grandissimo...mi sei stato

grandissimo...mi sei stato molto utile...grazie:)

ritratto di ciccio

Grazie 1000! è super

Grazie 1000! è super utilissima!Compliments!

ritratto di fede

Grazie mille!! il tuo lavoro

Grazie mille!! il tuo lavoro mi è tornato davvero molto utile!! :-)
molto chiaro ed esauriente per le mie necessità!!

ritratto di gerlos

Grazie mille!!

Grazie a te!
Mi fa sempre piacere sapere che le mie pagine sono utili a qualcuno!
ciao ciao

ritratto di Antonio

Ciao, complimenti per la

Ciao,
complimenti per la guida.
Ho un problema, vediamo se mi puoi aiutare:
devo scrivere un programma in fortran in cui richiamo gnuplot e dallo stesso programma vorrei editare dei comandi.
Utilizzo il comando call system('gnuplot') e si apre la finestra del programma ma non sono riuscito a capire come far editare i comandi.
Hai qualche suggerimento da darmi??
ti ringrazio, saluti

ritratto di gerlos

Prgrammare gnuplot tramite fortran o altro

Purtroppo ho usato fortran poco e per poco tempo, per cui non so darti indicazioni molto precise, purtroppo.
Però, vista la popolarità di gnuplot in campo scientifico, sono sicuro che quel che ti serve sia fattibile.

In prima battuta, se non devi far nulla di complicato, potresti scrivere uno script (o far scrivere al tuo programma fortran uno script) con i comandi che vuoi far eseguire a gnuplot, e passare il nome di questo script come argomento a gnuplot, analogamente a come faresti da riga di comando. Non so come si faccia a passare argomenti ai programmi esterni con il fortran, ma di sicuro un modo c'è.

In alternativa, potresti usare una delle tante librerie che si pongono come interfaccia a gnuplot. Ad esempio, dopo una rapida ricerca con google ho trovato:
http://gnuplotfortran.sourceforge.net/
http://orion.math.iastate.edu/burkardt/g_src/gnufor/gnufor.html
http://www.math.yorku.ca/~akuznets/gnufor2/index.html
Non le ho mai usate né provate, ma sembrano far quel che ti serve.

Personalmente, quando mi serve accedere alle funzioni di gnuplot dai miei programmi python uso questo:
http://gnuplot-py.sourceforge.net/

Anche se spesso trovo più comodo usare librerie per realizzare grafici specifiche per il linguaggio di programmazione che uso (con python mi trovo molto bene con matplotlib (http://matplotlib.sourceforge.net/), che mi permette di realizzare grafici di ottima qualità senza complicazioni. Sicuramente esiste qualcosa di analogo anche per fortran.

ritratto di Marina

aiuto

Ciao innanzittutto complimenti per la guida.
Sto usando gnuplot per motivi di studio e, essendo abbastanza perfettina, volevo scrivere delle formule matematiche sul titolo. In particolare devo scrivere un integrale definito. Documentandomi un pò su internet ho trovato il modo, ovvero impostando l'output in postscript e aggiungendo l'opzione "enhanced". Purtroppo il comando per scrivere l'integrale, come in latex, non lo legge, però riesco ad usare benissimo gli apici e i pedici con _ e ^. Come posso fare? Grazie

ritratto di Silvia

pare che funzioni ma non si vede

ciao la tua guida mi è piaciuta moltissimo in quanto sono una super principiante e ci capisco pochissimo ^^ comunque recentemente ho dovuto cambiare computer per cause di forza maggiore e sono passata da gnuplot 4.2 a 4.4 che utilizzo su ubuntu che ho installato..il problema è che quando chiedo di plottare dei dati da file come facevo con la vecchia versione non mi dà errore ma non appare nemmeno nessun grafico! cosa che succedeva automaticamente prima..le differenze fondamentali sono che le versioni di ubuntu e gnuplot sono quelle aggiornate e il computer è a 64b e non a 32b (ho visto su forum che certe cose non funzionano per questo motivo..)
ti chiedo scusa per la profonda ignoranza.. mi sai dire come far apparire i grafici? grazie!

ritratto di Anonymous

Grandissimo! Grazie mille.

Grandissimo! Grazie mille.

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.