Di gnuplot, bagaimana membuat plot dengan garis tetapi melewatkan titik data yang hilang?

20

Saya memiliki nilai yang dikaitkan dengan setiap hari, seperti:

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

Saat memplot data ini dalam gnuplot dengan garis, titik data terhubung dengan baik. Sayangnya, di tempat-tempat lebih dari seminggu, titik data bisa hilang. Gnuplot menarik garis panjang selama interval ini. Bagaimana saya bisa membuat gnuplot hanya menghubungkan titik pada hari yang berurutan?

Solusi yang memerlukan preprocessing data baik-baik saja, karena saya sudah memuluskannya dengan skrip.

Inilah yang saya gunakan:

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"

Contoh: Contoh gnuplot

Anna
sumber
Berikut adalah gambar masalahnya: i.stack.imgur.com/aYH4N.png (tidak dapat menambahkan gambar ke pos karena beberapa alasan). Saya ingin area yang dilingkari dibiarkan kosong.
Anna
Selamat datang di superuser. Anda tidak bisa karena Anda belum mengumpulkan cukup reputasi di situs ini. Jika Anda tidak puas dengan perubahan saya, tentu saja Anda dapat mengembalikannya (atau mengedit lagi).
Baarn

Jawaban:

16

Letakkan catatan kosong (baris kosong) di mana tidak ada data. Dari dokumen :

Catatan kosong tunggal menunjukkan diskontinuitas dalam plot; tidak ada garis akan bergabung dengan titik yang dipisahkan oleh catatan kosong (jika mereka diplot dengan gaya garis).

Keith
sumber
1
Terima kasih, ini berfungsi untuk diskontinuitas di semua seri. Bagaimana jika saya memiliki diskontinuitas dalam satu seri, tetapi tidak yang lain?
Anna
8
Itu bekerja dengan menempatkan tanda hubung bukan nilai-nilai.
Anna
Bagi saya - itu adalah garis dengan 2 karakter spasi.
3kstc
9

Anda bisa menggunakan string apa pun yang bukan angka sebagai nilai untuk titik data yang hilang atau secara eksplisit menentukan string data yang hilang menggunakan set datafile missingperintah.

Jika Anda kemudian plot garis menggunakan

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

maka Gnuplot akan meninggalkan celah.

Roland W
sumber
2

Anda juga dapat melakukan sesuatu seperti ini untuk secara otomatis membuat kesenjangan ketika jarak antara nilai x melebihi ambang batas:

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

Anda harus menyesuaikan nilai awal "sebelumnya" dan "saat ini", dan ambang ("7200" pada contoh di atas).

Fungsi "yornothing" menggunakan fungsi "shift" untuk menyimpan satu nilai x sebelumnya. Setiap kali yornothing dipanggil, ia mengembalikan nilai y atau "0/0", tergantung pada apakah nilai absolut dari perbedaan antara x dan nilai sebelumnya melebihi ambang batas.

Nilai 0/0 memberitahu gnuplot untuk mengabaikan titik itu.

Bryan Wright
sumber