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

Installazione, configurazione e uso di programmi e strumenti.
sp27
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 397
Iscrizione: mercoledì 19 marzo 2008, 19:22

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

Messaggio 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!
Ultima modifica di Anonymous il lunedì 31 gennaio 2011, 18:15, modificato 1 volta in totale.
Avatar utente
takeshi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 789
Iscrizione: venerdì 24 novembre 2006, 18:33

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

Messaggio 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
Raising Elephants Is So Utterly Boring
as-far-as-i-know
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1096
Iscrizione: martedì 26 maggio 2009, 13:23

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

Messaggio da as-far-as-i-know »

... new ...
Ultima modifica di as-far-as-i-know il martedì 18 gennaio 2011, 18:33, modificato 1 volta in totale.
Message to Canonical: I dislike Unity and am ready to migrate somewhere. From Ubuntu 6.10 to 11.04 with love, thank you!
sp27
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 397
Iscrizione: mercoledì 19 marzo 2008, 19:22

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

Messaggio 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.
Avatar utente
takeshi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 789
Iscrizione: venerdì 24 novembre 2006, 18:33

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

Messaggio 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...
Raising Elephants Is So Utterly Boring
sp27
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 397
Iscrizione: mercoledì 19 marzo 2008, 19:22

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

Messaggio da sp27 »

Grazie!!
Questa pare proprio perfetta. In effetti avevo il pdf, ma è talmente corposo che non riuscivo a trovare.... ancora grazie, buona giornata.
Scrivi risposta

Ritorna a “Applicazioni”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 13 ospiti