2008-10-22 6 views
5

tengo un archivo de datos de 3 columnas y quería usar el splot para trazar el mismo. Pero lo que quiero es que gnuplot dibuje la primera fila (en un color, digamos rojo) y luego hace una pausa de, por ejemplo, 0.3 segundos y luego pasa a trazar la siguiente fila (en otro color, no en rojo, digamos en verde), hace una pausa 0,3 segundos y luego pasa a la siguiente fila ... y así sucesivamente.Gnuplot: Cómo trazar cada línea en un archivo después de una pausa

Cualquier ayuda será muy apreciada.

gracias de antemano

Saludos Pankaj

Respuesta

2

Si se quiere producir una animación, es mejor utilizar herramientas especializadas para ello (como mplayer).

Use gnuplot para preparar todas las imágenes fuente (la primera con una sola fila graficada, la segunda - con dos líneas, etc.), luego use mplayer o convert (desde imagemagic) para producir avi o GIF animado fuera de los archivos originales.

Puede usar el siguiente fragmento de shell para producir copias parciales del archivo de entrada, cada una con un número creciente de líneas.

file="your input file.dat" 
lines=$(wc -l $file) 
i=1 
while [ $i -le $lines ] ; do 
    head -${i} ${file} > ${file%.dat}-${i}lines.dat 
done 

Dada somefile.dat Esto producirá archivos "somefile-1lines.dat", "somefile-2lines.dat", etc A continuación, puede utilizar:

for f in *lines.dat ; do 
    gnuplot ... $f 
done 

para trazar todos ellos en secuencia.

Si mi suposición es incorrecta y todo lo que realmente desea es esta pausa, entonces puede intentar configurar las cosas para que gnuplot obtenga datos de stdin y luego use este scipt (llámelo paused-input.sh) para archivo de la tubería de entrada con pausas después de cada línea:

#!/bin/bash 
while read l ; do 
    echo "$l" 
    sleep 1 
done 

continuación, se invoca así:

(pause-input.sh | gnuplot ...) < somefile.dat 
2

Buen intento, pero ... esto creará tantos archivos como el número de líneas en el archivo de datos . Esto me parece feo.

Podemos escribir un script de shell/Perl para crear script de gnuplot con comandos en ella como:

splot x1 y1 z1 
pause 1 
replot x2 y2 z2 
pause 1 
replot x3 y3 z3 
pause 1 
replot x4 y4 z4 

donde xi, yi, zi = coordenadas en el archivo de datos de número de línea i. pausa 1 lo detendrá por un segundo.

Esto es sólo una idea, aunque no estoy seguro de cómo trazar coordenadas directamente en lugar de suministrar un archivo de datos a gnuplot.

0

make a plotfile ej. 'myplotfile.plt'. y ponle todos los comandos que normalmente escribirías en gnuplot para trazar tus gráficos.

continuación, sólo tiene que añadir la línea

!sleep $Number_of_Seconds_to_Pause

a su archivo de trazado donde lo desee para hacer una pausa, y ejecutarlo desde la terminal con

gnuplot myplotfile.plt

(la extensión de la PLOTFILE no lo hace Importa, si está en un cuadro de Windows o Mac que le gustaría usar .txt)

ejemplo de diagrama de trama:

set title 'x squared' 
plot x**2 title '' 
!sleep 5 
set title 'x cubed' 
plot x**3 title '' 
!sleep 5
1

Para obtener el efecto de atraer cada línea uno a la vez (con una pequeña pausa en el medio) es quizás más fácil con la versión actual de gnuplot (han pasado más de 4 años desde que esta pregunta fue publicada).

Se puede utilizar un -loop for, y la palabra clave every, así:

# Find out the number of lines in the data somehow, 
# for example like this: 
num_lines="`cat my_datafile.d | wc -l`" 

# Plot the first line in the data-file: 
plot './my_datafile.d' every 1::0::0 

# For the remaining lines: 
do for [line_index = 1:num_lines-1] { 
    pause 0.3 
    # Replot (from the same datafile) each line 
    # in the data file from the first one up to 
    # the current line_index 
    replot '' every 1::0::line_index 
} 

La parte every 1::0::line_index instruye gnuplot - en cada bucle - para dibujar cada línea (el 1) en los datos del primero (el 0) hasta el valor actual de la variable de bucle line_index. Lo que estamos usando es el <point_incr>, <start_point> y <end_point> que se refiere el texto de ayuda de gnuplot:

gnuplot> help every 
The `every` keyword allows a periodic sampling of a data set to be plotted. 
[...] 

Syntax: 
    plot 'file' every {<point_incr>} 
         {:{<block_incr>} 
         {:{<start_point>} 
          {:{<start_block>} 
          {:{<end_point>} 
           {:<end_block>}}}}} 
[...] 

información Versión:

$ gnuplot --version 
gnuplot 4.6 patchlevel 0 
Cuestiones relacionadas