In gnuplot, come tracciare le linee ma saltare i punti dati mancanti?


20

Ho un valore associato ad ogni giorno, come tale:

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

Quando si tracciano questi dati in gnuplot con linee, i punti dati sono ben collegati. Sfortunatamente, in alcuni punti della settimana possono mancare punti dati. Gnuplot disegna linee lunghe su questi intervalli. Come posso fare in modo che gnuplot colleghi punti solo in giorni consecutivi?

Le soluzioni che richiedono la preelaborazione dei dati vanno bene, dato che l'ho già lisciato con uno script.

Ecco cosa uso:

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"

Esempio: esempio di gnuplot


Ecco una foto del problema: i.stack.imgur.com/aYH4N.png (per qualche motivo non è possibile aggiungere immagini al post). Voglio che l'area cerchiata venga lasciata vuota.
Anna,

Benvenuto in superutente. Non puoi perché non hai ancora acquisito abbastanza reputazione su questo sito. Se non sei soddisfatto delle mie modifiche, puoi ovviamente ripristinarle (o modificarle di nuovo).
Baarn,

Risposte:


16

Inserisci un record vuoto (riga vuota) dove non ci sono dati. Dai documenti :

Singoli record vuoti indicano discontinuità in un diagramma; nessuna linea unirà i punti separati da un record vuoto (se sono tracciati con uno stile di linea).


1
Grazie, questo funziona per discontinuità in tutte le serie. E se avessi una discontinuità in una serie, ma non nell'altra?
Anna,

8
Ha funzionato inserendo trattini anziché valori.
Anna,

Per me - era una linea con 2 caratteri spaziali.
3kstc,

9

È possibile utilizzare qualsiasi stringa che non sia un numero come valore per i punti dati mancanti o specificare esplicitamente una stringa dati mancante utilizzando il set datafile missingcomando

Se poi traccia le linee usando

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

quindi Gnuplot lascerà un vuoto.


2

Puoi anche fare qualcosa del genere per creare automaticamente spazi vuoti quando la distanza tra i valori x supera una soglia:

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

Dovrai regolare i valori iniziali di "precedente" e "corrente" e la soglia ("7200" nell'esempio sopra).

La funzione "yornothing" utilizza la funzione "shift" per memorizzare un valore precedente di x. Ogni volta che viene chiamato yornothing, restituisce il valore di y o "0/0", a seconda che il valore assoluto della differenza tra x e il suo valore precedente superi la soglia.

Un valore di 0/0 indica a gnuplot di ignorare quel punto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.