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.
binary.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!
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???).
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.
gnuplot-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.
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.
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
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.
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.
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:
f(x)=a*sin(x+b)+c
a=1.2345 b=2.3456 c=3.4567
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
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).
plot 'dati.dat' using 1:2:3 with errorbars, f(x)
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 colorImpostiamo 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:
replotChiudiamo 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!
commenti
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
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
complimenti
Oh, una buona giuda base per questo programma diabolico :-D
Grazie 1000!
grandissimo...mi sei stato
grandissimo...mi sei stato molto utile...grazie:)
Grazie 1000! è super
Grazie 1000! è super utilissima!Compliments!
Grazie mille!! il tuo lavoro
Grazie mille!! il tuo lavoro mi è tornato davvero molto utile!! :-)
molto chiaro ed esauriente per le mie necessità!!
Grazie mille!!
Grazie a te!
Mi fa sempre piacere sapere che le mie pagine sono utili a qualcuno!
ciao ciao
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
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.
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
Invia nuovo commento