[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 242.   Gnuplot

Gnuplot (1) è un programma applicativo per il disegno di funzioni e di dati nello spazio a due e tre dimensioni. Il suo funzionamento avviene per mezzo di istruzioni impartite attraverso una riga di comando e in questo senso il suo utilizzo può risultare un po' strano all'utilizzatore occasionale.

Gnuplot è disponibile su molti sistemi operativi differenti e per quanto riguarda GNU/Linux, si utilizza l'interfaccia grafica X. Per la precisione, si deve impegnare una finestra di terminale, attraverso la quale impartire i comandi. Questi generano eventualmente una rappresentazione grafica che viene mostrata in una finestra separata. L'esempio seguente mostra una sessione di lavoro brevissima utilizzando l'eseguibile gnuplot per visualizzare la funzione x2 * sin(x), dove sia l'asse X che l'asse Y vanno da -P-greco a +P-greco.

gnuplot[Invio]

        G N U P L O T
        Linux version 3.5 (pre 3.6)
        patchlevel beta 347
        last modified Mon Jun 22 13:22:33 BST 1998

        Copyright(C) 1986 - 1993, 1998
        Thomas Williams, Colin Kelley and many others

        Send comments and requests for help to info-gnuplot@dartmouth.edu
        Send bugs, suggestions and mods to bug-gnuplot@dartmouth.edu

Terminal type set to 'x11'

gnuplot> splot [-pi:pi] [-pi:pi] x**2 * sin(y)[Invio]

La figura 242.2 mostra il risultato di questa funzione, così come appare nella finestra generata dal comando di Gnuplot che è appena stato visto.

Figura 242.2. Una funzione nello spazio tridimensionale disegnata con Gnuplot.

gnuplot-esempio

La versione per GNU/Linux di Gnuplot utilizza la libreria Readline per il controllo della riga di comando: questo facilita la sua configurazione (attraverso il file ~/.inputrc) e il riutilizzo di comandi già inseriti, attraverso lo scorrimento dello storico. In pratica, chi utilizza già la shell Bash dovrebbe trovarsi a suo agio di fronte alla riga di comando di Gnuplot.

242.1   Avvio e interazione normale

Gnuplot viene avviato attraverso l'eseguibile gnuplot, utilizzando necessariamente una finestra di terminale. Non è previsto l'uso di opzioni speciali, a parte quelle comuni per l'uso di programmi nel sistema grafico X (-geometry, -display, ecc.).

gnuplot [opzioni] [file_script...]

Eventualmente, come si vede dallo schema sintattico, possono essere indicati dei file da caricare ed eseguire. Si tratta di script di Gnuplot, composti semplicemente da una sequenza di comandi che potrebbero essere impartiti attraverso la riga di comando normale dello stesso.

Il disegno delle funzioni avviene attraverso il comando plot, per il disegno di curve nello spazio a due dimensioni, e splot, per il disegno di piani nello spazio a tre dimensioni. Il funzionamento interattivo di Gnuplot (quello normale che si ottiene quando non si indicano file da caricare) prevede in particolare il comando help per ottenere una guida rapida ai comandi e il comando exit (o quit) per terminarne il funzionamento.

La guida rapida ottenibile con il comando help permette di selezionare degli argomenti particolari che generalmente corrispondono ai nomi dei comandi utilizzabili. Il comando help da solo mostra un'introduzione all'uso di Gnuplot e termina elencando gli argomenti per i quali si possono richiedere informazioni specifiche.

242.2   Comandi comuni

I comandi di Gnuplot sono numerosi e complessi. Qui viene mostrato solo l'uso di alcuni di questi e in modo elementare, dove in particolare anche gli schemi sintattici vengono semplificati.

In generale, è possibile mettere assieme più comandi in un'unica riga separandoli con il punto e virgola (;); i comandi possono continuare nella riga successiva se si utilizza la barra obliqua inversa (\) esattamente alla fine di una riga da continuare. Alcuni argomenti dei comandi sono delle stringhe, nel senso che non fanno riferimento a parole chiave previste; in tal caso devono essere delimitate con gli apici singoli (') o con gli apici doppi ("), dove le stringhe delimitate con apici doppi espandono alcune sequenze precedute dalla barra obliqua inversa, mentre le altre no.

Una riga di comando di Gnuplot può contenere anche stringhe delimitate da apici inversi (`). In tal caso queste stringhe vengono interpretate come comandi del sistema operativo sottostante e vengono rimpiazzate con il risultato dell'esecuzione del comando stesso.

I comandi possono contenere dei commenti che iniziano nel momento in cui appare il simbolo # e fanno in modo che venga ignorato tutto quello che segue fino alla fine della riga.

Quando un comando prevede l'indicazione di un intervallo di valori, questo viene indicato utilizzando la notazione [inizio:fine], con le parentesi quadre che fanno parte della notazione stessa. Se per qualche motivo si deve indicare un intervallo predefinito in modo esplicito, si possono usare le parentesi aperte e chiuse senza alcuno contenuto: [].

Comando Descrizione
help [voce]
? [voce]
Mostra la guida interna riferita alla voce richiesta, oppure all'introduzione di Gnuplot.
exit
quit
I comandi exit o quit concludono il funzionamento di Gnuplot.
plot [intervalli] funzione \
  \[title stringa_titolo]
Il comando plot serve per il disegno di punti su un piano (lo spazio a due dimensioni). Di solito si utilizza preferibilmente per il disegno di una funzione, come nella sintassi mostrata qui. Gli intervalli sono al massimo due: il primo si riferisce all'asse X e il secondo all'asse Y. Il titolo che può essere indicato in una stringa dopo la parola chiave title serve a definire una didascalia per la curva che viene disegnata.
plot [intervalli] stringa_file_dati \
  \[title stringa_titolo]
plot può essere usato per visualizzare anche una serie di punti come indicato all'interno di un file di dati che viene descritto più avanti. È importante osservare comunque che un file di dati di Gnuplot non ha lo stesso formato degli script di questo.
splot [intervalli] funzione \
  \[title stringa_titolo]
Il comando splot serve per il disegno di punti su uno spazio (a tre dimensioni). Di solito si utilizza preferibilmente per il disegno di una funzione, come nella sintassi mostrata qui. Gli intervalli sono al massimo tre: il primo si riferisce all'asse X, il secondo all'asse Y e il terzo all'asse Z. Il titolo che può essere indicato in una stringa dopo la parola chiave title serve a definire una didascalia per il piano che viene disegnato.
splot [intervalli] \
  \stringa_file_dati \
  \[title stringa_titolo]
splot può essere usato per visualizzare anche una serie di punti come indicato all'interno di un file di dati, esattamente come nel caso di plot, con la differenza che le coordinate in questione sono fatte di tre elementi.
load stringa_file_script
load carica ed esegue il contenuto di uno script di Gnuplot. Al termine dell'esecuzione dello script riprende il funzionamento normale.
save stringa_file_script
save salva l'impostazione e il disegno attuale in uno script di Gnuplot. Eventualmente si può modificare manualmente il file in questione utilizzando un file per la modifica dei file di testo.
print espressione
stringa
print restituisce il risultato dell'espressione oppure la stringa fornita come argomento. In pratica permette di fare il calcolo di un valore o di mostrare una frase.
if (condizione) \
  \comando[; comando]...
if esegue il comando (o i comandi se ne viene indicato più di uno) solo se la condizione posta tra parentesi risulta vera.
pause n_secondi [stringa]
pause serve a fare una pausa della durata indicata dal primo argomento. Se si vuole che per proseguire debba essere premuto il tasto [Invio], occorre indicare il valore -1. La stringa è facoltativa e permette di mostrare un messaggio contenente la stringa stessa. pause è particolarmente adatto negli script di Gnuplot.

Segue la descrizione di alcuni esempi.

242.3   Espressioni

Le espressioni che si possono utilizzare con Gnuplot sono più o meno le stesse dei linguaggi di programmazione più comuni e, in generale, gli spazi orizzontali sono ignorati. Tra le altre cose questo giustifica il motivo per cui diversi tipi di argomenti dei comandi di Gnuplot devono essere definiti come stringhe delimitate.

L'aritmetica di Gnuplot distingue tra numeri interi e numeri a virgola mobile, per cui, utilizzando numeri interi si hanno risultati interi, mentre utilizzando valori a virgola mobile si ottengono risultati a virgola mobile. In pratica:

gnuplot> print 10/3[Invio]

3

gnuplot> print 10/3.0[Invio]

3.33333333333333

gnuplot> print 10/2[Invio]

5

gnuplot> print 10/2.0[Invio]

5.0

Le costanti numeriche possono essere indicate nei modi consueti, con o senza segno, separando la parte intera da quella decimale attraverso un punto, oppure si può usare anche una notazione esponenziale. Per esempio:

gnuplot> print 1e2[Invio]

100.0

gnuplot> print 1e-2[Invio]

0.01

Gli operatori che si possono utilizzare nelle espressioni di Gnuplot sono in pratica quelli del linguaggio C. La tabella 242.10 elenca e descrive gli operatori aritmetici e quelli di assegnamento.

Tabella 242.10. Elenco degli operatori aritmetici e di quelli di assegnamento relativi a valori numerici.

Operatore e
operandi
Descrizione
+op
Non ha alcun effetto.
-op
Inverte il segno dell'operando.
op1 + op2
Somma i due operandi.
op1 - op2
Sottrae dal primo il secondo operando.
op1 * op2
Moltiplica i due operandi.
op1 / op2
Divide il primo operando per il secondo.
op1 % op2
Modulo: il resto della divisione tra il primo e il secondo operando.
var = valore
Assegna alla variabile il valore alla destra.
op1 ** op2
Eleva il primo operando alla potenza del secondo.

Molti degli operatori matematici hanno senso solo perché Gnuplot consente di definire delle variabili al volo, semplicemente assegnandoci un valore. L'esempio seguente assegna alla variabile a il doppio del P-greco:

gnuplot> a = 2*pi[Invio]

Per visualizzarne il contenuto basta utilizzare il comando print:

gnuplot> print a[Invio]

6.28318530717959

Gli operatori di confronto determinano la relazione tra due operandi. Il risultato dell'espressione composta da due operandi posti a confronto è di tipo booleano, rappresentabile all'interno di Gnuplot come !0, o non-zero (Vero), e zero (Falso), esattamente come accade nel linguaggio C. È importante sottolineare che qualunque valore diverso da zero equivale a Vero in un contesto logico. Gli operatori di confronto sono elencati nella tabella 242.12.

Tabella 242.12. Elenco degli operatori di confronto. Le metavariabili indicate rappresentano gli operandi e la loro posizione.

Operatore e
operandi
Descrizione
op1 == op2
Vero se gli operandi si equivalgono.
op1 != op2
Vero se gli operandi sono differenti.
op1 < op2
Vero se il primo operando è minore del secondo.
op1 > op2
Vero se il primo operando è maggiore del secondo.
op1 <= op2
Vero se il primo operando è minore o uguale al secondo.
op1 >= op2
Vero se il primo operando è maggiore o uguale al secondo.

Quando si vogliono combinare assieme diverse espressioni logiche, comprendendo in queste anche delle variabili che contengono un valore booleano, si utilizzano gli operatori logici (noti normalmente come: AND, OR, NOT, ecc.). Il risultato di un'espressione logica complessa è quello dell'ultima espressione elementare a essere valutata. Gli operatori logici sono elencati nella tabella 242.13.

Tabella 242.13. Elenco degli operatori logici. Le metavariabili indicate rappresentano gli operandi e la loro posizione.

Operatore e
operandi
Descrizione
! op
Inverte il risultato logico dell'operando.
op1 && op2
Se il risultato del primo operando è Falso non valuta il secondo.
op1 || op2
Se il risultato del primo operando è Vero non valuta il secondo.

Gnuplot riconosce una serie di funzioni in parte elencate nella tabella 242.14, oltre alla costante pi (solo al minuscolo) che rappresenta il P-greco.

Tabella 242.14. Alcune funzioni riconosciute da Gnuplot.

Funzione Descrizione
rand(op)
Numero casuale.
int(op)
Parte intera.
abs(op)
Valore assoluto.
sqrt(op)
Radice quadrata.
log10(op)
Logaritmo in base 10.
log(op)
Logaritmo naturale.
exp(op)
e^x.
sin(op)
Seno.
cos(op)
Coseno.
tan(op)
Tangente.
asin(op)
Arco-seno.
acos(op)
Arco-coseno.
atan(op)
Arco-tangente.
sinh(op)
Seno iperbolico.
cosh(op)
Coseno iperbolico.
tanh(op)
Tangente iperbolica.

Infine, Gnuplot, oltre alla possibilità di creare e assegnare dei valori a delle variabili, può definire delle funzioni. L'esempio seguente definisce la funzione denominata funzione che ha due variabile, x e y, che si traduce nell'espressione x**2 * y:

gnuplot> funzione(x,y) = x**2 * y[Invio]

In seguito, si può utilizzare la funzione appena creata per farci dei calcoli:

gnuplot> print funzione(2,3)[Invio]

12

Oppure la si può usare per disegnarne il grafico:

gnuplot> splot funzione(x,y)[Invio]

Naturalmente la stessa cosa vale per le funzioni con una sola variabile.

242.4   Script e file di dati

I file che possono essere indicati alla fine degli argomenti della riga di comando dell'eseguibile gnuplot e quelli che possono essere caricati attraverso il comando load, sono degli script di Gnuplot. La sintassi di questi file è molto semplice: si tratta solo di un elenco di comandi di Gnuplot.

In particolare, se esiste il file ~/.gnuplot, questo viene trattato come uno script da eseguire all'avvio di Gnuplot.

A titolo di esempio viene mostrato uno script del genere il cui scopo è quello di mostrare una serie di funzioni come in una sequenza di diapositive.

#
# Sequenza di funzioni con Gnuplot.
#
plot [-1:1]  2*x title 'f(x) = 2x'
pause -1 'premere <Invio> per continuare'

plot [-2:2]  x**2 title 'f(x) = x^2'
pause -1 'premere <Invio> per continuare'

plot [-2:100] log(x) title 'log(x)'
pause -1 'premere <Invio> per continuare'

plot [-pi:pi]  sin(x) title 'seno'
pause -1 'premere <Invio> per continuare'

plot [-pi:pi] tan(x) title 'tangente'
pause -1 'premere <Invio> per continuare'

splot [-5:5] [-5:5]  2*x+y title 'f(x,y) = 2x+y'
pause -1 'premere <Invio> per continuare'

splot [-5:5] [-5:5] x**2*y title 'f(x,y) = x^2 * y'
pause -1 'premere <Invio> per continuare'

splot [-pi/4:pi/4] [-pi/2:pi/2] sin(x)*cos(y) title 'f(x,y) = sin(x)*cos(y)'
pause -1 'fine della rappresentazione'

# Fine

Gnuplot è in grado di gestire anche i file di dati, ovvero dei file contenenti solo delle coordinate corrispondenti a punti da rappresentare. Si tratta sempre di file di testo, in cui vengono ignorati i commenti preceduti dal simbolo # oltre alle righe bianche e a quelle vuote, mentre le altre righe contengono coordinate nella forma:

x y [z]

Per esempio, la riga seguente rappresenta il punto di coordinata X=1 e Y=2:

1 2

La riga seguente rappresenta il punto di coordinata X=1, Y=2 e Z=3:

1 2 3

Eccezionalmente, i comandi plot e splot possono essere utilizzati direttamente per visualizzare una serie di punti senza doverli caricare da un file esterno. Per ottenere questo si utilizzano nel modo seguente:

plot|splot '-'
coordinata
    ...
e

L'esempio seguente mostra cinque punti appartenenti alla retta f(x)=x:

plot '-'
0 0
1 1
2 2
3 3
4 4
e

In questo stesso modo si possono rappresentare più gruppi di punti, aumentando conseguentemente i trattini che fungono da argomento di plot o di splot. L'esempio seguente mostra cinque punti appartenenti alla retta f(x)=x e altri cinque punti (colorati in modo diverso) appartenenti alla retta f(x)=x+1:

plot '-', '-'
0 0
1 1
2 2
3 3
4 4
e
0 1
1 2
2 3
3 4
4 5
e

242.5   Controllare l'uscita grafica

I disegni realizzati con Gnuplot sono diretti normalmente in una finestra di X. Gnuplot controlla il formato delle immagini che crea attraverso il comando set terminal.

set terminal tipo_di_uscita_grafica [altri_argomenti]

Per esempio, nel caso specifico della rappresentazione normale in una finestra di X, la sintassi diventa:

set terminal x11 [reset] [n_finestra]

Per la precisione, si possono visualizzare più finestre contemporaneamente, numerate a partire da zero. Utilizzando però la parola chiave reset, si eliminano tutte le finestre.

Alternativamente si può fare in modo di generare un'immagine che non viene visualizzata, ma salvata in un file. La sintassi seguente riguarda la possibilità di generare immagini in formato PNG.

set terminal png [small|medium|large] [monochrome|gray|color]

Nello schema sintattico, le parole chiave small, medium e large, si riferiscono alla dimensione dei caratteri utilizzati nelle scale e nelle didascalie. Le parole chiave monochrome, gray e color, si riferiscono alla colorazione o meno che devono avere le immagini.

Il comando appena descritto non permette di stabilire la destinazione del file generato, pertanto questa è semplicemente lo standard output. Ciò rende praticamente impossibile la gestione di immagini PNG attraverso l'uso di Gnuplot in modo interattivo. In pratica, si deve realizzare uno script, in modo da poter avviare Gnuplot ridirigendo lo standard output verso il file desiderato. Quello che segue è un esempio banale di un tale script.

# parabola.gnuplot
set terminal png medium color
plot x**2

Per generare il file parabola.png, basta il comando seguente:

gnuplot parabola.gnuplot > parabola.png[Invio]

Eventualmente si può generare anche un'immagine GIF.

set terminal gif [transparent] [interlace] [small|medium|large] \
  \[size pixel_o,pixel_v] [colore_sfondo colore_assi [colore_disegno...] ]

La schema sintattico è più complesso e di conseguenza offre maggiori possibilità. Le dimensioni dei caratteri usati per le scale, i titoli e le didascalie, sono controllate dalle stesse parole chiave viste per il formato PNG. La parola chiave transparent controlla la realizzazione di un disegno con un fondale trasparente; interlace fa in modo di generare un file GIF interlacciato. La dimensione dell'immagine può essere definita attraverso l'opzione size, seguita dalla quantità di punti grafici (pixel) orizzontali e verticali (come si vede dallo schema).

In particolare possono essere controllati i colori, indicati attraverso degli argomenti che vengono posti nella parte finale del comando. Il primo di questi colori si riferisce al fondale, il secondo è quello degli assi X, Y ed eventualmente Z. I colori successivi si riferiscono agli elementi visualizzati (le curve o i piani nello spazio). Gli argomenti che esprimono i colori hanno il formato seguente:

xrossoverdeblu

I tre colori fondamentali sono espressi da coppie di cifre esadecimali. Per esempio: xffffff è il bianco, x000000 è il nero, xff0000 è il rosso, x00ff00 è il verde e x0000ff è il blu.

set terminal gif xffffff x0000ff x00ff00
splot (x**2)*y

L'esempio mostra uno script con il quale si vuole generare un file GIF (di dimensioni normali) contenente il grafico della funzione f(z)=(x2)*y, utilizzando dei colori particolari: bianco per lo sfondo, blu per gli assi e verde per il reticolo che rappresenta il piano nello spazio.

Si osservi che i vari formati grafici in cui possono essere resi i disegni di Gnuplot dipendono dal modo in cui questo è stato compilato. In pratica, la disponibilità o meno di un certo formato dipende da delle librerie incluse o meno in fase di compilazione.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Gnuplot   software libero con licenza speciale


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome gnuplot.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!