W gnuplot, jak drukować za pomocą linii, ale pomijać brakujące punkty danych?

20

Mam wartość powiązaną z każdym dniem, jako taką:

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

Podczas rysowania tych danych w gnuplot z liniami punkty danych są ładnie połączone. Niestety w miejscach powyżej tygodnia danych może brakować punktów. Gnuplot rysuje długie linie w tych odstępach. Jak mogę sprawić, aby gnuplot łączył punkty tylko w kolejnych dniach?

Rozwiązania wymagające wstępnego przetwarzania danych są w porządku, ponieważ już wygładzam je za pomocą skryptu.

Oto czego używam:

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"

Przykład: przykład gnuplot

Ania
źródło
Oto zdjęcie problemu: i.stack.imgur.com/aYH4N.png (z jakiegoś powodu nie można dodawać zdjęć do postu). Chcę, aby kółko zostało puste.
Anna
Witamy w superużytkowniku. Nie możesz, ponieważ nie masz jeszcze wystarczającej reputacji na tej stronie. Jeśli nie jesteś zadowolony z moich zmian, możesz je oczywiście cofnąć (lub ponownie edytować).
Baarn

Odpowiedzi:

16

Umieść pusty rekord (pusty wiersz) w miejscu, w którym nie ma danych. Z dokumentów :

Pojedyncze puste rekordy oznaczają nieciągłości na wykresie; żadna linia nie połączy punktów oddzielonych pustymi rekordami (jeśli są one wykreślone ze stylem linii).

Keith
źródło
1
Dzięki, działa to na nieciągłości we wszystkich seriach. A jeśli mam nieciągłość w jednej serii, ale nie w drugiej?
Anna
8
Działa to poprzez wstawienie myślników zamiast wartości.
Anna
Dla mnie była to linia z 2 znakami spacji.
3kstc
9

Możesz użyć dowolnego ciągu, który nie jest liczbą, jako wartości brakujących punktów danych lub jawnie określić brakujący ciąg danych za pomocą set datafile missingpolecenia.

Jeśli następnie narysujesz linie za pomocą

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

wtedy Gnuplot opuści lukę.

Roland W.
źródło
2

Możesz także zrobić coś takiego, aby automatycznie tworzyć przerwy, gdy odległość między wartościami x przekroczy pewien próg:

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

Konieczne będzie dostosowanie początkowych wartości „poprzednich” i „bieżących” oraz progu („7200” w powyższym przykładzie).

Funkcja „yornothing” używa funkcji „shift” do zapisania jednej poprzedniej wartości x. Za każdym razem, gdy wywoływane jest nic, zwraca wartość y lub „0/0”, w zależności od tego, czy wartość bezwzględna różnicy między x a jej poprzednią wartością przekracza próg.

Wartość 0/0 każe gnuplotowi zignorować ten punkt.

Bryan Wright
źródło