es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo añadir etiquetas dependientes del tiempo en Gnuplot

Un archivo de datos contiene tres columnas, en las cuales la primera y segunda representan la posición x & y de un círculo en un momento determinado (en segundos), según se indica en la tercera columna. Por ejemplo, las primeras dos líneas en “data.txt” dan la posición de dos círculos en el tiempo=0, seguido de dos líneas en blanco y luego la posición de los dos círculos en el tiempo=0.1 seg y así sucesivamente. Las primeras líneas de data.txt son:

 0   0  0
-1  -1  0


 1  1.0 0.1
-1 -0.5 0.1


 1.2  1.25 0.2
-0.5 -0.25 0.2
...

El código Gnuplot que produce una serie de cuadros (una película) con la posición de los dos círculos en el tiempo es:

        set terminal gif size 1200,1200 animate delay 500
        set output "movie.gif"
        stats "data.txt" u 1:2 name "A"
        set style circle radius graph 0.025; set style fill solid
        set xrange [A_min*1.1:A_max_x*1.1]
        set yrange [A_min_y*1.1:A_max_y*1.1]
        do for [i=0:A_blocks-2] {
        plot "data.txt" index i u 1:2 w circle
        }

Estoy tratando de agregar una etiqueta o cuadro de texto de la forma “Tiempo=?” a cada cuadro, donde el signo de interrogación es reemplazado por el número de la tercera columna. ¿Algún sugerencia sobre cómo hacerlo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar una etiqueta o cuadro de texto de la forma “Time=?” a cada cuadro donde el signo de interrogación sea reemplazado por el número de la tercera columna, puedes modificar el código de Gnuplot de la siguiente manera:

    set terminal gif size 1200,1200 animate delay 500
    set output "movie.gif"
    stats "data.txt" u 1:2 name "A"
    set style circle radius graph 0.025; set style fill solid
    set xrange [A_min_x*1.1:A_max_x*1.1]
    set yrange [A_min_y*1.1:A_max_y*1.1]
    do for [i=0:A_blocks-2] {
      time = system("awk 'NR==" . (i*4+1) . "{print $3}' data.txt")
      set label 1 sprintf("Time=%s", time) at A_max_x*0.9, A_max_y*0.9
      plot "data.txt" index i u 1:2 w circle
    }
    

    La modificación implica agregar dos líneas de código dentro del bucle do. La primera línea recupera el valor de la tercera columna del bloque correspondiente usando awk y lo guarda en la variable time. La segunda línea agrega una etiqueta con el formato “Time=?” donde el signo de interrogación es reemplazado por el valor de time, posicionada cerca de la esquina superior derecha de la gráfica. Ten en cuenta que la etiqueta se le asigna un identificador único (en este caso, 1) para que pueda ser removida antes de la siguiente iteración del bucle.

    Al agregar estas dos líneas, se agregará una etiqueta con el valor de tiempo a cada cuadro de la película.

Comments are closed.