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

20

J'ai une valeur associée à chaque jour, en tant que telle:

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

Lorsque vous tracez ces données dans gnuplot avec des lignes, les points de données sont bien connectés. Malheureusement, à certains endroits, plus d'une semaine de points de données peuvent être manquants. Gnuplot trace de longues lignes sur ces intervalles. Comment puis-je faire en sorte que gnuplot ne connecte les points que pendant des jours consécutifs?

Les solutions qui nécessitent un prétraitement des données sont très bien, 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 "first line", \\
     ""            using 1:3 with lines title "second line"

Exemple: exemple gnuplot

Anna
la source
Voici une image du problème: i.stack.imgur.com/aYH4N.png (impossible d'ajouter des images au message pour une raison quelconque). Je veux que la zone entourée soit laissée vierge.
Anna
Bienvenue au superutilisateur. Vous ne pouvez pas parce que vous n'avez pas encore assez de réputation sur ce site. Si vous n'êtes pas satisfait de mes modifications, vous pouvez bien sûr les annuler (ou les modifier à nouveau).
Baarn

Réponses:

16

Mettez un enregistrement vide (ligne vierge) où il n'y a pas de données. De la documentation :

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

Keith
la source
1
Merci, cela fonctionne pour les discontinuités de toutes les séries. Et si j'ai une discontinuité dans une série, mais pas dans l'autre?
Anna
8
Cela a fonctionné en mettant des tirets à la place des valeurs.
Anna
Pour moi, c'était une ligne avec 2 caractères d'espace.
3kstc
9

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 à l'aide de la set datafile missingcommande.

Si vous tracez ensuite les lignes à l'aide de

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

alors Gnuplot laissera un espace.

Roland W
la source
2

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

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

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

La fonction "yornothing" utilise la fonction "shift" pour stocker une valeur précédente de x. Chaque fois que yornothing est appelé, il renvoie la valeur de y ou "0/0", selon que 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.

Bryan Wright
la source