Gnuplot'ta satırlarla nasıl grafik çizilir ancak eksik veri noktaları atlanır?


20

Her günle ilişkili bir değere sahibim, şöyle:

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

Bu verileri gnuplot'ta çizgilerle çizerken, veri noktaları iyi bağlanır. Ne yazık ki, bir haftadan fazla yerlerde veri noktaları eksik olabilir. Gnuplot bu aralıklarda uzun çizgiler çizer. Yalnızca gnuplot'un birbirini izleyen günlerde bağlantı noktalarını nasıl kurabilirim?

Verilerin önceden işlenmesini gerektiren çözümler gayet iyi, çünkü zaten bir komut dosyasıyla düzeltiyorum.

İşte ne kullanıyorum:

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"

Misal: gnuplot örneği


Sorunun bir resmi: i.stack.imgur.com/aYH4N.png (herhangi bir nedenle yazıya resim ekleyemiyorum). Daire içine alınmış alanın boş bırakılmasını istiyorum.
Anna

Süper kullanıcı hoş geldiniz. Yapamazsınız çünkü bu sitede henüz yeterince itibar kazanmadınız. Değişikliklerimden memnun değilseniz, elbette bunları geri alabilirsiniz (veya tekrar düzenleyebilirsiniz).
Baarn

Yanıtlar:


16

Veri olmayan boş bir kayıt (boş satır) koyun. Gönderen docs :

Tek bir boş kayıt, bir arsadaki süreksizlikleri belirtir; hiçbir satır boş kayıtlarla ayrılmış noktalara birleştirilmez (çizgi stiliyle işaretlendiyse).


1
Teşekkürler, bu tüm serilerde süreksizlikler için işe yarar. Bir seride kesintiye uğrarsam, diğerinde olmazsa ne olur?
Anna

8
Değerler yerine tire koyarak işe yaradı.
Anna

Benim için - 2 boşluk karakteri olan bir satırdı.
3kstc

9

Sayı olmayan herhangi bir dizeyi eksik veri noktaları için değer olarak kullanabilir veya set datafile missingkomutu kullanarak açık bir şekilde eksik bir veri dizesi belirtebilirsiniz .

Daha sonra satırları kullanarak

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

Gnuplot bir boşluk bırakacaktır.


2

Ayrıca x değerleri arasındaki mesafe bir eşiği aştığında otomatik olarak boşluklar oluşturmak için böyle bir şey yapabilirsiniz:

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

"Önceki" ve "geçerli" nin başlangıç ​​değerlerini ve eşiği (yukarıdaki örnekte "7200") ayarlamanız gerekir.

"Yornothing" işlevi, x'in önceki bir değerini saklamak için "shift" işlevini kullanır. Yornothing her çağrıldığında, x ile önceki değeri arasındaki farkın mutlak değerinin eşiği aşıp aşmadığına bağlı olarak y veya "0/0" değerini döndürür.

0/0 değeri, gnuplot'a bu noktayı yoksaymasını söyler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.