[GnuPlot] Create a plot with Date Time on X axis


Download here : [download id=”1309″]

The following script, will read the ‘data.csv’ file and create a plot with the data.
The input file (data.csv) should have two columns: the first one is a date/time string and the second is a number.
e.g

2016-01-19 13:12:38,2
2016-01-19 13:12:38,1
2016-01-19 13:12:38,0
2016-01-19 13:12:40,0
2016-01-19 13:12:41,0
2016-01-19 13:12:47,0

The chart will have on the X axis the date/time and on the Y axis the value of the second column.
All values under the 0 axis will be green and all values above it will be red.

Example output:

data.csv

Execution example: gnuplot -e "filename='data.csv'; width=2000; height=1000;" timeDifference.plot

#Setting output to be a PNG file of size 'width'x'height'
#'width' and 'height' are set from the command line. e.g gnuplot -e "filename='server_1.csv'; width=10000; height=500;" timeDifference.plot
#Setting the font of all text to be 'Verdana' size 8
set terminal pngcairo size width,height enhanced font 'Verdana,8'
#Setting the output filename to be the same as the input filename with the .png extension appended to it.
set output filename.'.png'

#We set the file separator to be the comma, this way we inform the engine that we will be processing a CSV file
set datafile separator ","

#Informing the engine that the X axis of our plot will be date/time data type
set xdata time
#We define how the date/time input must be parsed. In this example we expect the input to be like '2016-01-19 14:25:00'
set timefmt '%Y-%m-%d %H:%M:%S'

#We set the output format that will be shown on the X axis. Here we expect to show '19-01 New Line 14:25"
set format x "%d-%m\n%H:%M"
#Set the X axis label
set xlabel "Event Time"
#Set the Y axis label
set ylabel "Time Difference" 

#Enabling the Grid, this way major tick lines will be visible on the chart
set grid

#As we expect to have negative values as well, we make the zero Y axis line is thicker and has a different style from the rest so that it will be easier to spot
set xzeroaxis linetype 3 linewidth 1.5

#Creating a style for the lines that will be used in the plot. Type = 1, Color = green, Width = 1
set style line 1 linetype 1 linecolor rgb "green" linewidth 1.000
#Creating a style for the lines that will be used in the plot. Type = 1, Color = red, Width = 1
set style line 2 linetype 1 linecolor rgb "red" linewidth 1.000

#Actual plot command
#It directs the engine to plot the file that is in the filename variable, use the first and second column and use vertical columns with the styles we described above
#First line, We will plot only values that are greater or equal to 0, the rest we give 1/0 which is an invalid number and will not be plotted
#Second line, We will plot only values that are strictly less than 0, the rest we give 1/0 which is an invalid number and will not be plotted
plot filename using 1:($2 <= 0?$2:1/0) with impulses ls 1 notitle,\
filename using 1:($2 <= 0?1/0:$2) with impulses ls 2 notitle

This post is also available in: Greek

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.