Wie kann man in gnuplot mit Linien plotten, aber fehlende Datenpunkte überspringen?

20

Jedem Tag ist ein Wert zugeordnet:

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

Wenn Sie diese Daten in einem Gnuplot mit Linien zeichnen, sind die Datenpunkte gut miteinander verbunden. Leider können an Stellen über eine Woche Datenpunkte fehlen. Gnuplot zeichnet lange Linien über diese Intervalle. Wie kann ich dafür sorgen, dass Gnuplot nur an aufeinanderfolgenden Tagen Punkte verbindet?

Lösungen, die eine Vorverarbeitung der Daten erfordern, sind in Ordnung, da ich sie bereits mit einem Skript geglättet habe.

Folgendes verwende ich:

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"

Beispiel: Gnuplot-Beispiel

Anna
quelle
Hier ist ein Bild des Problems: i.stack.imgur.com/aYH4N.png (aus irgendeinem Grund können keine Bilder zum Beitrag hinzugefügt werden). Ich möchte, dass der eingekreiste Bereich leer bleibt.
Anna
Willkommen beim Superuser. Dies ist nicht möglich, da Sie auf dieser Website noch nicht genügend Reputation gesammelt haben. Wenn Sie mit meinen Änderungen nicht zufrieden sind, können Sie sie natürlich zurücksetzen (oder erneut bearbeiten).
Baarn

Antworten:

16

Fügen Sie einen leeren Datensatz (leere Zeile) ein, in dem keine Daten vorhanden sind. Aus den Dokumenten :

Einzelne leere Datensätze kennzeichnen Diskontinuitäten in einem Diagramm. Keine Linie verbindet Punkte, die durch leere Datensätze getrennt sind (wenn sie mit einem Linienstil geplottet sind).

Keith
quelle
1
Danke, das funktioniert für Diskontinuitäten in allen Serien. Was ist, wenn ich in einer Serie eine Diskontinuität habe, aber nicht in der anderen?
Anna
8
Es funktionierte, indem Striche anstelle der Werte gesetzt wurden.
Anna
Für mich war es eine Zeile mit 2 Leerzeichen.
3.
9

Sie können eine beliebige Zeichenfolge, die keine Zahl ist, als Wert für die fehlenden Datenpunkte verwenden oder mithilfe des set datafile missingBefehls explizit eine fehlende Datenzeichenfolge angeben .

Wenn Sie dann die Linien zeichnen mit

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

dann wird Gnuplot eine Lücke hinterlassen.

Roland W
quelle
2

Sie können auch wie folgt vorgehen, um automatisch Lücken zu erstellen, wenn der Abstand zwischen x-Werten einen bestimmten Schwellenwert überschreitet:

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

Sie müssen die Anfangswerte für "Vorherige" und "Aktuelle" sowie den Schwellenwert ("7200" im obigen Beispiel) anpassen.

Die Funktion "yornothing" verwendet die Funktion "shift", um einen vorherigen Wert von x zu speichern. Bei jedem Aufruf von yornothing wird entweder der Wert von y oder "0/0" zurückgegeben, je nachdem, ob der absolute Wert der Differenz zwischen x und dem vorherigen Wert den Schwellenwert überschreitet.

Ein Wert von 0/0 weist gnuplot an, diesen Punkt zu ignorieren.

Bryan Wright
quelle