In gnuplot, how to plot with lines but skip missing data points?
I've got a value associated to each day, as such:
120530 70.1
120531 69.0
120601 69.2
120602 69.5
# and so on for 200 lines
When plotting this data in gnuplot with lines, the data points are nicely connected. Unfortunately, at places over a week of data points can be missing. Gnuplot draws long lines over these intervals. How can I make gnuplot only connect points on consecutive days?
Solutions that require preprocessing of the data are fine, as I already smooth it with a script.
Here is what I use:
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"
Example:
Put an empty record (blank line) where there is no data. From the docs:
Single blank records designate discontinuities in a plot; no line will join points separated by a blank records (if they are plotted with a line style).
You can use any string that is not a number as value for the missing data points or explicitly specify a missing data string using the set datafile missing
command.
If you then plot the lines using
plot "vikt_ma.txt" using 1:($2) with lines title "first line"
then Gnuplot will leave a gap.
You can also do something like this to automatically create gaps when the distance between x values exceeds some threshold:
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
You'll need to adjust the initial values of "previous" and "current", and the threshold ("7200" in the example above).
The function "yornothing" uses the function "shift" to store one previous value of x. Each time yornothing is called, it returns either the value of y or "0/0", depending on whether the absolute value of the difference between x and its previous value exceeds the threshold.
A value of 0/0 tells gnuplot to ignore that point.