- not so Frequently Asked Questions -

update 2004/9/15

Date/Time Data

1 | 2 | 3 | 4

plotting time-sequence data

To plot a data file which contains date or time, you need to tell gnuplot that the data are date/time type by the command set xdata time or set ydata time , then specify the data file format by set timefmt . Let's begin with the following example:

2004-02-09  310
2004-02-10  185
2004-02-11  239
2004-02-12  132
2004-02-13   85
2004-02-14   57
2004-02-15    8

A corresponding timefmt to read this data is "%Y-%m-%d". In this case zero's are padded when month and/or date are less than 10, but gnuplot can read data without this padding (2004-2-9, for example).

gnuplot> set xdata time
gnuplot> set timefmt "%Y-%m-%d"
gnuplot> plot "sample.dat" using 1:2 with boxes

Reading date/time data with gnuplot is rather flexible. Here are some examples of the format given for timefmt.

data timefmt comment
2004/4/6 %Y/%m/%d 2004/04/06 works well
December/96 %B/%y warning if mis-spelled
2004/Jan %Y/%b 3-letters abbreviation
1970/240 %Y/%j "%j" is a day of the year (1-365)
02:45:03 %H:%M:%S "%H", 24-hour
1076909172 %s seconts since 1/1/1970 00:00

to change output text

When gnuplot reads in date/time type data as X-axis data, it generates appropriate X-tics automatically. In the example above, which are time sequence data for one week, gnuplot writes "month/day" on the X-axis, plus time of "00:00" which we may not need. To control the output format, use set format . This format specification not the same as usual numerical output, but it is a format for the strftime function of UNIX library.

gnuplot> set xdata time
gnuplot> set timefmt "%Y-%m-%d"
gnuplot> set format x "%b/%a"
gnuplot> plot "sample.dat" using 1:2 with boxes

In addition to the format-characters shown above, you can use "%a" which does not exist in timefmt . With the "%a" format gnuplot gives you a weekday name. See manual of strftime function in detail. Anyway, formats such as "Y, y, m, d, H, M, S" are probably enough for almost all cases.