[Tech] [OT] gnuplot e lettura riga precedente a quella corrente

Pietro Poggi pietro.poggi@unifi.it
Gio 16 Nov 2006 18:06:29 CET


On Thu, 16 Nov 2006, Marco Calviani wrote:

> Salve ragazzi,
>  sto utilizzando gnuplot per plottare velocemente dei dati.  Ho,
> all'interno di un file ASCII di testo, delle colonne di dati, e
> pertanto utilizzo l'opzione using 1:2 (ad esempio) per plottare la
> colonna 2 in funzione delle prima. Tuttavia ho la necessita' di dover
> plottare non soltanto 2 ma 2/(1-(dato della riga precendente nella
> colonna 1)); poiche' gnuplot utilizza la routine di C scanf per
> leggere riga per riga non so come costringerlo a leggere la riga
> precedente a quella corrente.

Per fare cose di questo tipo suggerirei di usare
(a parte Matlab se ce l'hai, ma e' proprietario) un ambiente
di calcolo simil-matlab come Octave o Scilab (il primo free GPL, il 
secondo con una licenza sua comunque open source e gratis),
che hanno il vantaggio di dare gia' tutti gli strumenti
per fare elaborazioni (anche molto sofisticate) sui dati
interattivamente senza ricorrere a pezzetti in altri linguaggi.

La cosa sopra si puo' fare ad es. cosi'
(se il file non e' cosi' gigantesco che non lo puoi leggere tutto
in una variabile): carichi il contenuto del tuo file 'pippo.dat'
in una variabile (matrice) 'a' ad es. in scilab

loadmatfile('-ascii','pippo.dat')
   questo solo per dargli un nome maneggevole:
a=pippo;clear pippo;

[m,n]=size(a);
   ora a e' una matrice con n colonne ciascuna di m dati
   e ci fai sopra quello che vuoi:
plot(a(:,1),a(:,2),'o-')
mette in grafico col 2 in funz. di col 1 a linea unita e cerchietti

per quello che volevi fare tu:
b=diff(a(:,1));
ora b ha lunghezza m-1 e contiene b(i)=a(i+1,1)-a(i,1)
plot(a(2:m,1),a(2:m,2)./b,'o-')

o senza definire b:
plot(a(2:m,1),a(2:m,2)./(a(2:m,1)-a(1:m-1,1)),'o-')

ad imparare la sintassi basilare (che e' quasi la stessa tra Scilab,
Octave e Matlab) ci vuole poco e in seguito questo strumento
fa risparmiare un sacco di tempo. 
Spero di non aver sbagliato sopra perche' l'ho scritto di fretta
ma l'idea e' quella...

-- 
Pietro Poggi <pietro.poggi@unifi.it>
Dipartimento di Fisica, Universita' di Firenze
Via G. Sansone 1, I-50019 Sesto F.no (FI), Italy
phone: +39-0554572024



Maggiori informazioni sulla lista flug-tech