2012-03-02 22 views
30

Tengo datos en un archivo de texto que tiene, por ejemplo, 10000 filas y 2 columnas. Sé que puedo trazarlo fácilmente por plot "filename.txt" using 1:2 with lines. Lo que quiero, sin embargo, es solo trazar las filas de 1000 a 2000 o cualquier otra selección razonable. ¿Es posible hacer eso fácilmente? Muchas gracias por adelantado.Gnuplot trazando datos desde un archivo hasta una fila

+0

tal vez esto puede ayudar a usted también: http://stackoverflow.com/questions/6564561/gnuplot-conditional-plotting-plot-col-acol-b-if-col-cx –

Respuesta

26

más simple:

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

¿Hay alguna buena información en línea en la que pueda aprender este tipo de cosas pequeñas? trucos increíbles Gracias por la respuesta por cierto. – YBE

+0

@YBE Sugiero [este sitio] (http://t16web.lanl.gov/Kawano/gnuplot/index-e.html). – kev

+0

@kev enlace roto –

58

Parece ser que el "every" command en gnuplot es lo que está buscando:

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

Alternativamente, pre-proceso de su archivo para seleccionar las filas en las que está interesado. Por ejemplo, el uso de awk:

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

luego usar el resultado "processed.txt" en su gnuplot comando/script existente.

+0

Si usted está en linux o mac osx, deberías tener awk ya (es parte del conjunto de herramientas estándar * nix, como sed y grep). Comenzaría ejecutando el comando anterior como un paso de procesamiento previo (antes de ejecutar gnuplot), que creará un nuevo archivo de datos "processed.txt" y dejará intacto el archivo existente. Luego debe usar "processed.txt" en lugar de "filename.txt" en sus comandos de trazado. El manual para awk se puede encontrar aquí: http://www.gnu.org/software/gawk/manual/gawk.html –

+5

+1 para la solución de gnuplot nativo – Pankrates

0

recomendaría algunas herramientas de línea de comandos como sed, grep o bash. En su ejemplo

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

y

tail -n 1000 temp.data > temp2.data 

podría funcionar. Pero no he probado si esos números grandes funcionan con la cabeza y la cola.

6

probablemente Se puede recortar la dependencia de una utilidad externa (Si el sistema no los tiene instalados, por ejemplo) utilizando la pseudo-columna 0.

ver help plot datafile using pseudocolumn

intentar algo como:

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 

(probado en Gnuplot 4.4.2, Linux)

1

Gnuplot ignora valores NaN. Esto funciona para mí para un rango específico de la coordenada x. Sin embargo, no estoy seguro de cómo especificar el rango de filas.

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