En gnuplot, ¿cómo trazar con líneas pero omitir los puntos de datos faltantes?


20

Tengo un valor asociado a cada día, como tal:

120530    70.1
120531    69.0
120601    69.2
120602    69.5
# and so on for 200 lines

Al trazar estos datos en gnuplot con líneas, los puntos de datos están muy bien conectados. Desafortunadamente, en lugares de más de una semana pueden faltar puntos de datos. Gnuplot dibuja largas líneas sobre estos intervalos. ¿Cómo puedo hacer que gnuplot solo conecte puntos en días consecutivos?

Las soluciones que requieren el preprocesamiento de los datos están bien, ya que lo suavizo con un script.

Esto es lo que uso:

set xdata time
set timefmt "%y%m%d"
plot "vikt_ma.txt" using 1:2 with lines title "first line", \\
     ""            using 1:3 with lines title "second line"

Ejemplo: ejemplo de gnuplot


Aquí hay una imagen del problema: i.stack.imgur.com/aYH4N.png (por alguna razón no puedo agregar imágenes a la publicación). Quiero que el área marcada se deje en blanco.
Anna

Bienvenido a superusuario. No puede porque todavía no ha reunido suficiente reputación en este sitio. Si no está satisfecho con mis cambios, por supuesto, puede revertirlos (o editarlos nuevamente).
Baarn

Respuestas:


16

Ponga un registro vacío (línea en blanco) donde no hay datos. De los documentos :

Los registros individuales en blanco designan discontinuidades en una parcela; ninguna línea unirá puntos separados por registros en blanco (si están trazados con un estilo de línea).


1
Gracias, esto funciona para discontinuidades en todas las series. ¿Qué pasa si tengo una discontinuidad en una serie, pero no en la otra?
Anna

8
Funcionó poniendo guiones en lugar de los valores.
Anna

Para mí, era una línea con 2 caracteres espaciales.
3kstc

9

Puede usar cualquier cadena que no sea un número como valor para los puntos de datos faltantes o especificar explícitamente una cadena de datos faltante usando el set datafile missingcomando.

Si luego traza las líneas usando

plot "vikt_ma.txt" using 1:($2) with lines title "first line"

entonces Gnuplot dejará un hueco.


2

También puede hacer algo como esto para crear huecos automáticamente cuando la distancia entre los valores de x excede algún umbral:

previous=1
current=1
shift(x) = (previous=current, current=x)
yornothing(x,y) = ( shift(x), abs(x-previous)<7200?y:sqrt(0/0))

plot "file.dat" using 1:(yornothing($1,$2)) with lines

Deberá ajustar los valores iniciales de "anterior" y "actual", y el umbral ("7200" en el ejemplo anterior).

La función "yornothing" utiliza la función "shift" para almacenar un valor anterior de x. Cada vez que se llama yornothing, devuelve el valor de y "0/0", dependiendo de si el valor absoluto de la diferencia entre x y su valor anterior excede el umbral.

Un valor de 0/0 le dice a gnuplot que ignore ese punto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.