Gnuplot

Gnuplot is a handy-dandy tool for drawing graphs, which not enough people know about. One of its nicest features is that it is fast for large data sets. Take, for example, this plot of response times for calls to an external service which I scrubbed out of some logs a while back::

Graph 1

It was generated in gnuplot from a six hundrend thousand or so line, tab delimited file of times and durations, which looked like:

2010-07-20T01:10:05	368
2010-07-20T01:10:24	368
2010-07-20T01:10:40	332
2010-07-20T01:10:58	328
2010-07-20T01:11:15	518
2010-07-20T01:12:02	131
2010-07-20T01:12:02	167
2010-07-20T01:12:02	445
2010-07-20T01:12:09	105
2010-07-20T01:12:09	274

I like to work in interactive mode, so this was rendered via the following commands, in the interactive prompt:

gnuplot> set xdata time
gnuplot> set timefmt '%Y-%m-%dT%H:%M:%S'
gnuplot> set format x '%R'
gnuplot> set terminal png size 640,480
gnuplot> set output '/tmp/graph.png'
gnuplot> plot 'zps.tsv' using 1:2 with dots

To summarize each line we tell it that the X axis is time, give it the time format to read, set the output format for the X axis to be just times, specify png output and size, specify the output file, and then tell it to plot.

Gnuplot has lots more that it can do, one easy and common one is to switch to log scale. Given our previous commands, we can re-render with the Y axis in log scale via:

gnuplot> set logscale y
gnuplot> set output '/tmp/graph-logscale.png'
gnuplot> plot 'zps.tsv' using 1:2 with dots

Which gives us something easier which can be a bit easier to see things outside the outliers around the downtime near the end.

Logscale Graph

It can do some analysis, not nearly what R can do, but really only that related to plotting graphs. It can do other fun things, like three dimensional plots, heat maps, etc. Check out the documentation and have fun!