Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotting date/time data points and functions in the same graph

Tags:

gnuplot

I want to plot a set of date/time data points with the x value specified by unix epoch, seconds since 1970. I also want to plot a trend function along with the data (yes I know gnuplot can do this for me, but this is an example). So I have data.txt that looks like this:

1303430400 67.5
1303862400 65.5
1304208000 62.9
1304553600 60.2

And I have a gnuplot program that looks like this:

set terminal png
set output 'plot.png'
set timefmt "%s"
set xdata time
plot "data.txt" using 1:2 title "Data points", \
    -7.0/(1123200)*x + 8190.43 title "Trend"

Now, the function is simply a linear approximation of the data. I have checked the formula and it should be ok. For instance, plugging in 1304553600 (the last value of the range), you get 60.2.

I would expect to see my data points plotted along with the function roughly following the data points. Instead, the function plot is way off, about 6000 too high. Apparently I do not understand something about date/time plots. What should I do to get my expected result?

like image 625
Mats Ekberg Avatar asked Jan 21 '26 11:01

Mats Ekberg


1 Answers

I found this in the man page: "[In date plots] gnuplot will also accept an integer expression, which will be interpreted as seconds from 1 January 2000."

There is a difference of 946684800 seconds between unix epoch and gnuplot time. This gnuplot script gives the expected plot (note the 946684800 addition to x):

set terminal png
set output 'plot.png'
set timefmt "%s"
set xdata time
plot "stackoverflow.txt" using 1:2 title "Data points", \
    -7.0/(1123200)*(x+946684800) + 8190.43 title "Trend"
like image 109
Mats Ekberg Avatar answered Jan 23 '26 01:01

Mats Ekberg