Gnuplot, qualcosa oltre i grafici

23 05 2010

Nelle guide passate in cui vi ho presentato Gnuplot vi ho mostrato come elaborare i dati, disegnare funzioni ad una o due variabili e a come salvare le vostre immagini.

Questa volta vi voglio invece mostrare come Gnuplot si comporta con altri programmi/protocolli. Non sto ancora parlando di programmi di studio come Maxima, o Octave (cosa che prima o poi farò), ma di come usare il terminale, come creare immagini per il Latex (che vi avevo gia presentato) e di come creare dei file per salvare il vostro lavoro (e non solo l’immagine).

Cominciamo quindi a vedere come interagire con il terminale:
Nella guida in cui parlavo dell’elaorazione dei dati ho sottolineato l’importanza di eseguire gnuplot nella cartella in cui erano salvati i nostri dati. Può però nascere il problema che ad un certo punto ci accorgiamo che alcuni dati non si trovano nella cartella che c’interessa, e quindi è neccessario spostarsi. Potrebbe anche darsi che magari non ci ricordiamo il nome del file e per dare una veloce occhiata non vale la pena aprire cartelle differenti e sarebbe molto più comodo dare un sorta di “ls” per poter vedere il contenuto della cartella.
Per fortuna per poter dare i comandi esattamente come se fossimo in una shell (cioè di fronte ad un terminale senza gnuplot avviato) basta dare!comandodove per comando potete dare un qualsiasi comando riconosciuto dal vostro sistema (potete vedere qua, qua e qua una piccola lista di comandi riconosciuti da sistemi operativi basati su debian), da questo momento in poi partirò dal presupposto che usiate un sistema basato su debian (come esempio esplicativo nell’immagine che potete vedere sto aggiornando il sistema).
In questo modo possiamo vedere facilmente il contenuto della nostra cartella (comando “ls”), oppure andare a prendere i dati di cui dobbiamo disegnare un grafico ovunque si trovino copiandoli nella nostra directory (comando “cp”)

Visto che a questo punto sul terminale non rimane molto altro da spiegare, direi di passare al salvataggio del nostro lavoro.
Ad esempio ho creato il seguente file (per semplicità chiamato file ;) ):

set title 'grafico bello'
set pm3d #colora la mappa
set xrange[-3:3]
set yrange[-3:3]
set zrange[-0.5:1]
set hidden3d
set isosample 40,40 #comando analogo a set sample, necessario per i grafici in 3d
splot exp(-x**2-y**2)

Per caricare il nostro salvataggio basta dare load 'file' ed è come se tutto quello che abbiamo scritto sul documento venisse riscritto sul terminale.
Gia che c’ero ne ho aprofittato per aggiungere un paio di comandi “nuovi”, ne senso che non gli avevo ancora presentati, li notate subito perchè dopo di essi ho messo un commento (che chiaramente non vengono letti da gnuplot)
In questo modo possiamo salvare facilmente tutte le nostre impostazioni e i nostri grafici se li vogliamo ridisegnare e rielaborarle.

Infine, ultima parte che voglio presentare oggi, è la possibilità di salvare i grafici fatti con gnuplot in un documento latex. Il metodo che vi presento io è il più “spartano”.
Per mostrarvi come funziona il tutto prendo come esempio il documento che ho scritto in questo articolo (ma qualsiasi documento può andare bene), che è un documento molto semplice.
A questo punto da gnuplot digitiamoset terminal latex
set output 'plot.tex'
load 'file'

Adesso se controllate nella vostra cartella troverete un file chiamato plot.tex, con dentro un codice, che basta copiare nel nostro documento di latex e che potete compilare con il comandolatex file.texdove per file mettete il nome del file.

Per tornare al terminale predefinito (o continuerete a generare soltanto documenti .tex) dovete dare:set terminal wxt

Non perchè questo sarà l’ultimo articolo che riguarderà gnuplot, ma mi sembra doveroso segnalarvi dove potete trovare praticamente tutta la documentazione (se il link non lo ho messo negli articolo precedenti è perchè non lo conoscevo ancora)





Gnuplot, nuovi comandi e riepilogo

15 05 2010

Dopo aver scritto un paio di articoli su Gnuplot (cioè su come elaborare i dati e su come disegnare funzioni analitiche) non ne poteva mancare uno (anche se corto) che vi spiegasse come disegnare grafici in 3D.
In sostanza cambia poco dal passaggio da 2D al 3D, senza un minimo di documentazione non riusciremmo però a disegnare le funzioni che ci interessano.
grafico 3dLa prima cosa a cui dobbiamo prestare attenzione è il comando per disegnare i grafici, mentre prima abbiamo sempre usato plot, il comando per disegnare un grafico ora sarà splot, un semplice esempio dovrebbe chiarire tutto:splot x**2+y**2 (ecco il minimo di documentazione di cui vi parlavo prima ;) )
Se il grafico appare molto confusionario, può tornare utile dare il seguente comando:set hidden3d
replot
così che la “griglia” che viene disegnata non è più trasparente, se la situazione è peggiorata date unset hidden3d
replot
e tutto sarà tornato come prima.

curva parametricaUn’altro modo per disegnare le funzioni è quella di esprimerla in forma parametrica (date una occhiata qua se non sapete di cosa sto parlando)
Per poter disegnare un grafico in tal modo basta dare il comandoset parametric un avviso v dirà che per le curve si usa la variabile t, mentre per le superfici la variabile u e v, diamo subito due esempi per chiarire la questione, dateplot t**2, sin(t) per disegnare una curva e splot u, u+v, u*vSe ad un certo punto decidiamo che ci siamo divertiti abbastanza con le funzioni parametriche allora possiamo uscire da questa “modalità” con il comando:unset parametric e un messaggio vi notificherà che le variabili adesso sono x per le curve, x e y per le superfici (le variabili che abbiamo sempre usato prima)

Adesso che vi ho mostrato come disegnare funzioni in 2D e 3D potrebbe essere interessante sapere come disegnare più funzioni su un grafico, sopratutto se dobbiamo fare qualche sorta di confronto. Anche qui i comandi sono molto semplici, sia per il 2D, si per il 3D; basta separare le funzioni che vogliamo disegnare da una virgola, ad esempio:plot sin(x), xgrafico e datiOvviamente possiamo anche combinare questi comandi con quelli per visualizzare i dati, diamo ad esempio il comando

plot 'dati', x**2-1/(x+1)

(Per ricordarvi come fare il grafico di dati guardatevi questo articolo)
Io nel file dati ho messo in colonna i numeri: 1  4  9  16  25  36

Dal momento che non mi sembra che ci sia molto altro da aggiungere ho pensato di descrivere qua altri comandi che conosco/reputo utili. Se alcuni fossero poco chiari, notificatemelo che vedrò di aggiornare l’articolo.

f(x)=espressione Per espressione possiamo mettere una qualsiasi funzione riportata in questo articolo
plot f(x) Disegna la funzione f(x)
splot f(x,y) Disegna la funzione f(x,y)
set parametric
unset parametric
comandi per abilitare/disabilitare la modalità in cui si definiscono le funzioni in forma parametrica
set title ‘nome del grafico Per dare un nome al grafico
set ylabel ‘asse delle y Per denominare l’asse delle y (cambiando la y con z o x cambiamo il nome degli altri assi)
set title ‘titolo Serve per mettere un titolo sul grafico
reset Per cancellare qualsiasi impostazione che abbiamo apportato durante la sessione
set samples numero Per numero mettiamo un numero che esprima quanto preciso deve essere il grafico per evitare che il grafico diventi spigoloso
replot Ridisegna il grafico (che sia stato generato con plot o splot non fa differenza)
plot ‘dati Per fare un grafico dei dati contenuti nel file dati, dobbiamo assicurarci che il file si trovi nella cartella dove abbiamo eseguito gnuplot
set xtics a,b,c Descrive quanti punti vanno disegnato nell’intervallo [a,c], cioè ogni b unità,
Se avessimo scritto ad esempio 0,1,19 avrebbe voluto dire che tra i valori 0 e 19 avremmo dovuto descrivere un punto ogni unità (in pratica ogni numero intero, 0 e 19 inclusi)
set xrange [a:b] Determina l’intervallo [a,b] su cui disegnare la funzione sull’asse delle x (sostituendo con la x la y o la z cambiamo il range dell’asse della y o della z)
set style data lines Collega i punti con linee, non necessario se stiamo disegnando una funzione analitica
set output ‘plot.png’
set terminal png
replot
Tripla di comandi per salvare l’immagine come plot.png
set terminal Per avere una lista di terminali ad opzioni, possiamo ad esempio decidere di scegliere quello che ci permette di salvare come sopra l’immagine in formato png




Gnuplot, funzioni analitiche

3 05 2010

In quest’articolo, come vi ho promesso l’ultima volta, cominceremo a disegnare qualche funzione.
Penso che un piccolo esempio sia più che sufficiente per rendere l’idea.
Apriamo quindi Gnuplot da terminale, e digitiamo:
plot x**2
finito.
Non credo ci voglia più di tanto a capire il comando, forse ciò che appare un po meno intuitivo è che si deve dare ** al posto di ^ per esprimere un potenza.
Facciamo quindi un veloce elenco delle funzioni che si possono disegnare (chiaramente si possono “mischiare” i comandi).

Polinomi, polinomi fratti
x**n
1/(x**n)

Funzioni trigonometriche
sin(x)   seno
cos(x)   coseno
tan(x)   tangente
asin(x)   arcoseno
acos(x)   arcocoseno
atan(x)   arcotangente

Funzioni Iperboliche
sinh(x)   seno iperbolico
cosh(x)   coseno iperbolico
tanh(x)   tangente iperbolica
asinh(x)   arcoseno iperbolico
acosh(x)   arcocoseno iperbolico
atanh(x)   arcotangente iperbolica

Funzioni Esponenziali
exp(x)   esponenziale
log(x)   logaritmo in base e
log10(x)   logaritmo in base 10

Altre funzioni varie

sqrt(x)  	radice quadrata di x
x**l  		x alla l (numero reale)
sgn(x)  	funzione segno (vale -1, 0, 1 a seconda del segno di x)
abs(x)  	funzione valore assoluto

i simboli per le operazioni sono i soliti (+, -, *, /) e ** sta per segnare l’esponente

E queste sono le costanti che abbiamo a disposizione
pi che sta per pi greco
per il numero di Nepero purtroppo non sono riuscito a capire quale fosse il comando, un semplice workaround è scrivere exp(1), cioè e alla 1.

Una cosa molto comoda che ho trovato in gnuplot è stata quella di poter salvare le funzioni con un nome. Scriviamo ad esempiofunzione(x)=sin(x)+sgn(x**2-4)*sin(x)+1/(x*+2)
plot funzione(x)
da questo punto in poi ci basta dare il secondo comando al posto del primo, che è molto più amichevole, sopratutto se stiamo lavorando con tante funzioni e sopratutto con lunghe espressioni.
Chiaramente possiamo anche buttare un parametro dentro la funzione
f(x)=k*x**2/(x**2+1) prima di disegnarla dovremo però specificare il parametro o ci verrà riportato un errore.
k=2
plot f(x)

Adesso invece vi voglio mostrare un funzione utile in gnuplot quando il nostro grafico ha molte curve, disegniamo la seguente funzione
plot sin(x**2)
Beh, la funziona appare un poco spigolosa nonostante invece sia continua su tutti i punti, come mai?
Per il semplice fatto che gnuplot per sapere dove/come/cosa disegnare calcola la funzione in tanti punti, li disegna, e poi unisce tutti i punti (fa esattamente lo stesso lavoro che faceva la volta scorsa leggendo i dati dai nostri file). Con funzioni come seno di x, x quadro, radice di x e via dicendo non ci accorgiamo di questo fatto, ma in questo grafico appena si.
Per risolvere il nostro problema basterà dare
set samples 1000
replot
chiaramente al posto di 1000 possiamo mettere numeri ben più grandi e piccoli.

Finisco questo articoli su qualche comando per descrivere e personalizzare un poco i nostri grafici (funzione comoda sopratutto se abbiamo intenzione di salvarli)
set title 'nome del grafico'
set ylabel 'asse delle y'
set xlabel 'asse delle x'
E a questo basta disegnare un grafico per notare le differenze
Per cancellare tutte le impostazioni basta dare sempre il comando reset





Gnuplot, disegniamo grafici

28 04 2010

Per un po’ di volte vi ho presentato programmi vari (Maxima, Octave, e GraphMonkey), in grado di aiutarci a compiere calcoli nel mondo della matematica, tutti questi sono in grado a generare grafici, che possono tornare molto utili nello studio di una funzione oppre nella semplice elaborazioni di dati.

Gnuplot nasce con l’intento di essere un elaboratore di dati che ci permetterà di disegnare grafici a 2 e tre dimensioni (di più diventa difficile :P ). È un programma molto potente che viene spesso implementato in altri (ad esempio octave), quindi può tornare molto comodo saperlo usare.

Chiaramente oltre ad essere multipiattaforma (esiste per Windows, Gnu/Linux, Solaris, Bsd..) richiede poche risorse, quindi possiamo usare qualsiasi computer per studiare i nostri dati.

chiaramente non elencherò tutte le qualità del programma, ma le operazioni principali che conosco e quindi quindi le più utili e/o usate, per approfondire il tema potete sempre cercare informazioni sul sito ufficiale, oppure tramite comandi nel terminale, ad esempio usando man.

Prima di tutto assicuriamoci di aver quindi installato il programmaapt-get install gnuplot

e di seguito apriamo il programma da terminale gnuplot

La prima proprietà che vi voglio mostrare è quella di poter leggere dati da un file e metterli in un grafico, creiamo quindi un file con diversi valori in una colonna, ad esempio:

1
-2
3

Il file lo ho chiamato “dati”, ed ecco che con il semplice comando

plot 'dati'

verrà visualizzato il grafico.

Assicuratevi di eseguire gnuplot nella cartella in cui è presente il vostro file, altrimenti sostituite ‘dati’ con ‘percorso/dati’, indicandogli così da dove leggere il file.

Detto sinceramente però il grafico è un poco scarno…vediamo come possiamo far di meglio, ad esempio
1) aggiungendo più valori sulle assi delle x
2) quanto deve essere lunga l’asse delle x
3) collegare i punti da linee
Eccovi i comandi (in ordine):
set xtics 0,1,18
set xrange [0:19]
set style data lines

a questo punto diamo il comando (l’immagine visualizzata è di un altro grafico, ma penso che renda comunque l’idea)replot

gia meglio, no? (non fosse che la funzione fa un po’ schifo…;))

Se volete potete modificare l’asse delle y come quella delle x, provate ad esempio a digitare

set ytics -18,2,18
replot

Prima di andare avanti voglio illustrarvi alcune picole utilità sulla barra in alto del grafico.
La doppia freccia serve per ri-tracciare il grafico, in pratica vi risparmia la fatica di scrivere replot quando ve lo scrivo io
La griglia serve per (chi lo avrebbe mai detto) mettere/togliere una griglia
La terza lente d’ingrandimento (quella con dentro il minigrafico) vi permette di adattare lo zoom al grafico attuale, in modo che possiate vedere tutti i dati in un colpo.

Fatta questa nota possiamo andare avanti con un altro esempio.

Prima di tutto diamoresetaltrimenti non riusciremo a visualizzare bene la seguente funzione che vi presento, dal momento che avrà anche valori negativi.

Creiamo un file (io lo chiamo sempre dati) con all’interno due colonne, una l’asse delle x (la prima colonna) e l’altra l’asse delle y. Ma come facciamo a fare due colonne? Basta semplicemente lasciare uno o più spazio tra i due numeri che starebbero sulla stessa riga.Il file aveva quidi un aspetto del genere:
-4 0
-3 0.5
-2 1
-1 0.5
0 0
1 0.5
2 1
3 0.5
4 0

e il grafico è il seguente dando il solito comando.
chiaramente possiamo aggiungere tutti i parametri che vogliamo:

set xtics -4,1,4
set ytics 0,0.5,1
set xrange [-4:4]
set style data lines
plot 'dati'

Bene, direi che per oggi questo è tutto. Spero che ora il programma vi appaia un poco meno ostico, volta prossima vedremo come disegnare funzioni analitiche, come quelle trattate in GraphMonkey.

Nel frattempo, se volete salvare i vostri grafici in un file immagine, allora non dovrete far nient’altro che scrivere:

set output 'plot.png'
set terminal png
replot

e un file in formato png verrà salvato nella cartella in cui stiamo lavorando.

Se v’interessano altri formati allora basta dare set terminal

e vi apparirà una lista di terminali disponibili con breve descrizione.