2009-11-13 17 views
12

Ho alcuni dati.Gnuplot Colonna cumulativa Domanda

#Time Distance 
1 3 
2 5 
4 9 
8 11 
12 17 
14 20 
16 34 
20 40 

voglio tracciare il tempo di distanza WRT cumulativa in gnuplot ... (dovrebbe essere facile), ma non so come.

x

+0

Hmm ... Le colonne sono state HTMLized via ... va bene ... si prega di prendere ogni coppia riga come coppia di colonne ... x – Xofo

+1

qualcuno Ok risolto ... aah la gioia di essere un SO niubbo . – Xofo

+0

@Xofo, aggiungi solo 4 spazi prima di ogni riga e i caratteri sono distanziati uniformemente. Ci sono più soluzioni, ma funziona ;-). E benvenuto in SO. –

risposta

1

Ho un po 'di esperienza con Gnuplot e ho appena studiato attentamente la documentazione certa. Sfortunatamente, non sono riuscito a trovare una soluzione per generare una somma cumulativa mentre stai progettando.

Penso che quello che dovrete fare è di massaggiare i vostri dati con un altro programma prima di lasciare che sia Gnuplot. awk è un programma che viene in mente, è praticamente costruito per armeggiare con dati colonnari. È possibile integrare questo processo nel processo di tracciamento seguendo these instructions.

+0

@Carl, scusa ho implementato inavvertitamente la tua risposta! Vorrei che SO fosse un po 'più veloce con quei messaggi "Nuova risposta". – Mark

+0

Non essere dispiaciuto, sono lusingato che il mio suggerimento sia quello che ha funzionato per te! Felice hacking. –

6

Supponendo che i dati sono in un file "test.txt", che ne dite:

plot "<awk '{i=i+$2; print $1,i}' test.txt" with lines 
+0

Grazie ... ci proverò. – Xofo

+0

Ho trovato che questo non funziona in modo pulito se si dispone di coppie di punti di flottazione.L'errore ho ottenuto è stato: awk: (nomefile = out.txt FNR = 131) fatale: stampa a "standard output" non è riuscito (tubo rotto) ^ Bad dati sulla linea 1 --- – Xofo

+0

Hmm, appena provato con galleggianti e ha funzionato per me. Cosa c'è sulla tua linea 1? È l'intestazione? Prova a rimuoverlo. – Mark

6

Lo stesso può essere raggiunto con la variante "cumulativo" dell'opzione "liscio" (basta inserire help smooth in gnuplot).

23

Per chiunque sia ancora alla ricerca di questo genere di cose, Se la versione gnuplot è 4.4 o più recente, è possibile effettuare le seguenti operazioni:

a=0 
#gnuplot 4.4+ functions are now defined as: 
#func(variable1,variable2...)=(statement1,statement2,...,return value) 
cumulative_sum(x)=(a=a+x,a) 
plot "test.dat" using 1:(cumulative_sum($2)) 
+0

Sto eseguendo gnuplot 4.4 patchlevel 2, lo script restituisce un errore 'non definito della variabile: a' per me. – Thomas

+4

@Thomas - Sei sicuro di aver ricordato 'a = 0' in alto? – mgilson

+0

Oops, non posso credere di non averlo visto. Funziona bene. Grazie, amico, ora mi sento stupido. :-) – Thomas

11

Se i dati sono nel file datafile, si può fare un cumulativo trama in questo modo:

$ gnuplot 
gnuplot> plot "datafile" smooth cumulative 
0

Questo non è ciò che la questione sta cercando, ma "gnuplot funzione di distribuzione cumulativa" mi porta sempre qui e nessuna delle risposte sono perfettamente ragione a meno che non hai già il gnuplot dati si aspetta.

Ma supponiamo di volere una funzione di distribuzione cumulata di solo delle distanze e avere solo le distanze prime. C'è un piccolo trucco con il quale gnuplot in grado di calcolare i valori y:

test.dat:

#Time Distance 
1 3 
2 5 
4 9 
8 11 
12 17 
14 20 
16 34 
20 40 

plot.gpi:

datafile = test.dat 
stats datafile 
plot datafile using 2:(1./STATS_records) smooth cumulative title "distance" 

enter image description here

Non è flessibile come avere tutte le dati, però.