Pagina 1 di 1

[Risolto] Gnuplot: come plottare tante curve su un stesso piano?

Inviato: domenica 16 gennaio 2011, 19:41
da sp27
Ciao a tutti, ho una domanda abbastanza banale su gnuplot, ma ci ho perso mezzo pomeriggio...
Ho un file di dati fatto così:
- sulla prima colonna: valori x
- dalla seconda alla N-esima colonna: valori y (N è un numero abbastanza grande).
Ora  vorrei scrivere un file .plt per disegnare il piano x-y con tutte le diverse N curve (tra l'altro le curve le vorrei tutte con lo stesso style). So che si può usare "using", ad esempio "using 1:2" mi farebbe il grafico con le prime due colonne.

Nel mio caso posso fare "using 1:2", "using 1:3", ................ "using 1:N".

Ok, però dato che N è grande, come rendere "automatico" il tutto? ...un ciclo for in gnuplot?? :-\
Grazie!

Re: Gnuplot: come plottare tante curve su un stesso piano?

Inviato: domenica 16 gennaio 2011, 22:47
da takeshi
Invece di effettuare il ciclo all'interno di gnuplot, potresti farlo da fuori (dalla shell):

Codice: Seleziona tutto

#!/bin/bash
input="/full/path/file.dati"

COL=$(awk '{print NF; exit}' "$input"); 

{ printf "plot '$input' using 1:2 with lines"; 

for ((i=3;i<=$COL;i++)); do 
    printf ", '' using 1:%d with lines" $i; 
done; 
echo; } | gnuplot -persist

Re: Gnuplot: come plottare tante curve su un stesso piano?

Inviato: domenica 16 gennaio 2011, 23:25
da as-far-as-i-know
... new ...

Re: Gnuplot: come plottare tante curve su un stesso piano?

Inviato: martedì 18 gennaio 2011, 14:41
da sp27
@takeshi: grazie, ottima idea!!
Avevo poi trovato anche un'altra soluzione, che consiste nel scrivere il file di dati in maniera diversa, vale a dire: invece di

X  Y1  Y2  Y3
.    .      .      .
.    .      .      .
.    .      .      .
.    .      .      .
.    .      .      .


scrivere così:

X  Y1 
.    .   
.    .   
.    .   
.    .   
.    .   


Y2   
.         
.         
.         
.         
.         


Y3   
.         
.         
.         
.         
.       
 

Se il file è in questa forma, un plot "generico" dà esattamente il grafico voluto.
Svantaggio: il file di dati risulta "illeggibile", cioè non si ha una "tabella" ben fatta.

Re: Gnuplot: come plottare tante curve su un stesso piano?

Inviato: martedì 18 gennaio 2011, 16:38
da takeshi
Cercando su google, ho trovato che con gnuplot 4.4 (la cui corposa
documentazione è reperibili in formato pdf qua) è possibile usare
il costrutto for in un comando plot:

Codice: Seleziona tutto

col = `awk '{print NF;exit}' datafile`

plot for [i=2:col] 'datafile' using 1:(column(i)) with lines
Il succo non cambia poi molto, però forse può esserti utile...

Re: Gnuplot: come plottare tante curve su un stesso piano?

Inviato: martedì 18 gennaio 2011, 16:59
da sp27
Grazie!!
Questa pare proprio perfetta. In effetti avevo il pdf, ma è talmente corposo che non riuscivo a trovare.... ancora grazie, buona giornata.