[Risolto] Gnuplot: come plottare tante curve su un stesso piano?
[Risolto] Gnuplot: come plottare tante curve su un stesso piano?
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!
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.
Re: Gnuplot: come plottare tante curve su un stesso piano?
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 -persistRaising Elephants Is So Utterly Boring
-
as-far-as-i-know
- Entusiasta Emergente

- Messaggi: 1096
- Iscrizione: martedì 26 maggio 2009, 13:23
Re: Gnuplot: come plottare tante curve su un stesso piano?
... 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!
Re: Gnuplot: come plottare tante curve su un stesso piano?
@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.
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?
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:
Il succo non cambia poi molto, però forse può esserti utile...
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 linesRaising Elephants Is So Utterly Boring
Re: Gnuplot: come plottare tante curve su un stesso piano?
Grazie!!
Questa pare proprio perfetta. In effetti avevo il pdf, ma è talmente corposo che non riuscivo a trovare.... ancora grazie, buona giornata.
Questa pare proprio perfetta. In effetti avevo il pdf, ma è talmente corposo che non riuscivo a trovare.... ancora grazie, buona giornata.
Chi c’è in linea
Visualizzano questa sezione: Google [Bot] e 13 ospiti
