22 votes

Dans gnuplot, comment tracer des lignes mais sauter les points de données manquants ?

J'ai une valeur associée à chaque jour, comme ceci :

120530    70.1
120531    69.0
120601    69.2
120602    69.5
# et ainsi de suite pour 200 lignes

Lorsque je trace ces données dans gnuplot avec des lignes, les points de données sont joliment connectés. Malheureusement, il arrive que sur des intervalles de plus d'une semaine des points de données soient manquants. Gnuplot trace de longues lignes sur ces intervalles. Comment puis-je faire en sorte que gnuplot ne connecte que les points des jours consécutifs ?

Les solutions nécessitant un prétraitement des données sont acceptables, car je les lisse déjà avec un script.

Voici ce que j'utilise :

set xdata time
set timefmt "%y%m%d"
plot "vikt_ma.txt" using 1:2 with lines title "première ligne", \\
     ""            using 1:3 with lines title "deuxième ligne"

Exemple : exemple gnuplot

18voto

Keith Points 7743

Ajoutez un enregistrement vide (une ligne vide) là où il n'y a pas de données. À partir des docs:

Des enregistrements vides uniques désignent des discontinuités dans un tracé; aucune ligne ne reliera des points séparés par des enregistrements vides (s'ils sont tracés avec un style de ligne).

11voto

Roland W Points 281

Vous pouvez utiliser n'importe quelle chaîne qui n'est pas un nombre comme valeur pour les points de données manquants ou spécifier explicitement une chaîne de données manquante en utilisant la commande set datafile missing.

Si vous tracez ensuite les lignes en utilisant

plot "vikt_ma.txt" using 1:($2) with lines title "première ligne"

alors Gnuplot laissera un espace.

2voto

Bryan Wright Points 41

Vous pouvez également faire quelque chose comme ceci pour créer automatiquement des écarts lorsque la distance entre les valeurs x dépasse un certain seuil :

précédent=1
actuel=1
déplacement(x) = (précédent=actuel, actuel=x)
younorien(x,y) = ( déplacement(x), abs(x-précédent)<7200?y:sqrt(0/0))

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

Vous devrez ajuster les valeurs initiales de "précédent" et "actuel", et le seuil ("7200" dans l'exemple ci-dessus).

La fonction "younorien" utilise la fonction "déplacement" pour stocker une valeur précédente de x. À chaque appel de younorien, elle renvoie soit la valeur de y, soit "0/0", en fonction de savoir si la valeur absolue de la différence entre x et sa valeur précédente dépasse le seuil.

Une valeur de 0/0 indique à gnuplot d'ignorer ce point.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X