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
risposta
Più semplice:
plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
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.
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 –
+1 per la soluzione nativa di gnuplot – Pankrates
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.
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)
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))
forse questo può aiutare anche voi: http://stackoverflow.com/questions/6564561/gnuplot-conditional-plotting-plot-col-acol-b-if-col-cx –