[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 331.   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 331.1 mostra il risultato di questa funzione, così come appare nella finestra generata dal comando di Gnuplot che è appena stato visto.

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

figure/a2-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.

331.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.

331.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 appare di seguito 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: [].

Alcuni comandi

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 (condizionecomando[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.

Esempi

gnuplot> help plot

Mostra la guida interna riferita al comando plot.

gnuplot> plot sin(x)

Disegna la funzione seno utilizzando una zona predefinita degli assi cartesiani.

gnuplot> plot sin(x) title 'seno di x'

Come nell'esempio precedente, indicando la stringa seno di x come didascalia riferita alla curva disegnata.

gnuplot> plot [-3:3] sin(x) title 'seno di x'

Come nell'esempio precedente, limitando l'ampiezza dell'asse X da -3 a +3.

gnuplot> plot [-pi:pi] sin(x) title 'seno di x'

Come nell'esempio precedente, limitando l'ampiezza dell'asse X da -P-greco a +P-greco.

gnuplot> plot 'mio_file.gnuplot'

Disegna nello spazio a due dimensioni i punti annotati nel file mio_file.gnuplot che si trova nella directory corrente.

gnuplot> splot x**2 * sin(y)

Disegna un piano nello spazio corrispondente alla funzione ottenuta dal quadrato di x moltiplicato per il seno di y.

gnuplot> splot x**2 * sin(y) title 'quadrato di x per seno di y'

Come nell'esempio precedente, indicando la stringa quadrato di x per seno di y come didascalia riferita al piano disegnato.

gnuplot> splot [-3:3] [-5:5] x**2 * sin(y) title 'quadrato di x per seno di y'

Come nell'esempio precedente, limitando l'ampiezza dell'asse X da -3 a +3 e quella dell'asse Y da -5 a +5.

gnuplot> plot [0:pi] [-pi:pi] x**2 * sin(y) title 'quadrato di x per seno di y'

Come nell'esempio precedente, limitando l'ampiezza dell'asse X da zero a +P-greco e quella dell'asse Y da -P-greco a +P-greco.

gnuplot> splot 'mio_file.gnuplot'

Disegna nello spazio a tre dimensioni i punti annotati nel file mio_file.gnuplot che si trova nella directory corrente.

gnuplot> if (1==1) print 'ovvio: 1 è uguale a 1'

Dal momento che la condizione si avvera, mostra la frase «ovvio: 1 è uguale a 1».

331.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 quelle del linguaggio C. La tabella 331.1 elenca e descrive gli operatori aritmetici e quelli di assegnamento.

Tabella 331.1. 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. Per esempio,

gnuplot> a = 2*pi[Invio]

assegna alla variabile a il doppio del P-greco. 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 331.2.

Tabella 331.2. 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 331.3.

Tabella 331.3. 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 331.4, oltre alla costante pi (solo al minuscolo) che rappresenta il P-greco.

Tabella 331.4. Alcune funzioni riconosciute da Gnuplot.

Operatori e operandi 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. Per esempio,

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

definisce la funzione denominata funzione che ha due variabile, x e y, che si traduce nell'espressione x**2 * y. In seguito, si può utilizzare la funzione appena creata per farci dei calcoli,

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

12

oppure per disegnarne il grafico:

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

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

331.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

1 2

rappresenta il punto di coordinata X=1 e Y=2, mentre la riga

1 2 3

rappresenta il punto di coordinata X=1, Y=2 e Z=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

Per esempio,

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

mostra cinque punti appartenenti alla retta f(x)=x.

In questo stesso modo si possono rappresentare più gruppi di punti, aumentando conseguentemente i trattini che fungono da argomento di plot o di splot. Per esempio,

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

mostra cinque punti appartenenti alla retta f(x)=x e altri cinque punti (colorati in modo diverso) appartenenti alla retta f(x)=x+1.

331.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.(2)

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. Questo fatto 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

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.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Gnuplot   software libero con licenza speciale

2) 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.


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

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]