2012-03-02 3 views
30

Ho dati in un file di testo che diciamo 10000 righe e 2 colonne. So che posso tracciare facilmente con plot "filename.txt" using 1:2 with lines. Quello che voglio è comunque solo la trama diciamo le righe da 1000 a 2000 o qualsiasi altra scelta ragionevole. È possibile farlo facilmente? Grazie mille in anticipo.Gnuplot che traccia i dati da un file fino a qualche riga

+0

forse questo può aiutare anche voi: http://stackoverflow.com/questions/6564561/gnuplot-conditional-plotting-plot-col-acol-b-if-col-cx –

risposta

26

Più semplice:

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines 
+1

C'è qualche roba on-line in cui posso imparare questo tipo di piccola trucchi fantastici. Grazie per la risposta btw. – YBE

+0

@YBE Suggerisco [questo sito] (http://t16web.lanl.gov/Kawano/gnuplot/index-e.html). – kev

+0

@kev collegamento interrotto –

58

sembra che il "every" command in gnuplot è quello che stai cercando:

plot "filename.txt" every ::1000::2000 using 1:2 with lines 

In alternativa, pre-processo il file per selezionare le righe in cui si è interessati. Ad esempio, utilizzando awk:

awk "NR>=1000 && NR<=2000" filename.txt > processed.txt 

quindi utilizzare il conseguente "processed.txt" nel tuo gnuplot comando/script esistente.

+0

Se siete su linux o mac osx, dovresti avere già awk (fa parte del set di strumenti standard * nix, come sed e grep). Vorrei iniziare eseguendo il comando precedente come una fase di pre-elaborazione (prima di avviare gnuplot), che creerà un nuovo file di dati "processed.txt" lasciando il file esistente illeso. Dovresti quindi utilizzare "processed.txt" al posto di "nomefile.txt" nei comandi di stampa. Il manuale di awk può essere trovato qui: http://www.gnu.org/software/gawk/manual/gawk.html –

+5

+1 per la soluzione nativa di gnuplot – Pankrates

0

mi sento di raccomandare alcuni strumenti a riga di comando come sed, grep o bash. Nel tuo esempio

head -n 2000 ./file.data > temp.data 

e

tail -n 1000 temp.data > temp2.data 

potrebbe funzionare. Ma non ho provato se numeri così grandi funzionassero con la testa e la coda.

6

Probabilmente si può tagliare la dipendenza da un programma di utilità esterno (Se il sistema non li hanno installati per esempio) con la pseudo-colonna 0.

vedere help plot datafile using pseudocolumn

Prova qualcosa di simile:

LINEMIN=1000 
LINEMAX=2000 

#create a function that accepts linenumber as first arg 
#an returns second arg if linenumber in the given range. 
InRange(x,y)=((x>=LINEMIN) ? ((x<=LINEMAX) ? y:1/0) : 1/0) 

plot "filename.txt" using (InRange($0,$1)):2 with lines 

(testato su Gnuplot 4.4.2, Linux)

1

Gnuplot ignora i valori NaN. Questo funziona per me per un intervallo specificato della coordinata x. Non so come specificare l'intervallo di righe però.

cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN 
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))