Instantly share code, notes, and snippets.

What would you like to do?
Basics of GNU Plot
#!/usr/bin/env gnuplot
## We are plotting a time-series data, Time in `HH:MM` is separated by a space with their respective Number, you can think of the number as the Number of Users of an Application. Here is a snippet of the input file "input.txt" (remove the hashes, of course):
#12:00 2345
#12:15 5084
#12:30 2490
#12:45 3490
#13:00 4567
#13:15 4240
#13:30 3210
###### Each command is followed by explanation. Note that this is a very basic set of commands for GNU Plot. ######
set title "Time vs Number of Users" font "calibri, 25"
##`set title` sets the title of the graph/image, `font` sets the font name and size. We are setting the `font` as "calibri" and font size as 25. We can also set only the font size keeping the font as default which is "arial" e.g. `set title font ", 20"`.
set xlabel "Time in HH:MM" font "calibri, 20"
##Label on X-axis and font
set ylabel "Number of Users" font "calibri, 20"
##Label on Y-axis and font
set term jpeg size 1200,800
##`set` is used to set options of GNUplot. `set term` indicates what type of output to generate. Here we are generating JPEG image having size of 1200x800 pixels. The default is 640x480.
set output "/tmp/out_image.jpg"
##By default the resultant image is shown on STDOUT, `set output` redirects the output to the given file, the filename must be enclosed in double quotes
set xdata time
##`set xdata` indicates the datatype used on the X-axis, `set xdata time` indicates the datatype is date/time.
set timefmt "%H:%M"
##Indicates the format of the X-axis data given in the input, In our case we have used `Hour:Minute` format. For example, if our input is in the form `2015-12-04 14:45:34` then we would use `set timefmt '%Y-%m-%d %H:%M:%S'`
## Things to note for the `tics` options:
## - A `tic` is a point of notation on the graph. Major tics are labelled tics i.e. `|` with labels e.g. on X-axis the time `01:30`, major tic-marks always refer to an input value. `set xtics` is used to manipulate major tic options on X-axis, similarly `ytics` is used for Y-axis.
## - There is another kind of tic-mark known as minor tics. These occur in between the major tics and are not associated with an input. These can be manipulated by `set mxtics` and `set mytics` for X-axis and Y-axis respectively.
set xtics format "%H:%M"
##The label format of the major tics on X-axis, the specifiers are similar to `set timefmt`
set xtics font ", 15"
##Sets font name and size for major tics on X-axis.
#set xtics rotate by 90
##Will rotate the major tics on X by 90 degrees counter clock-wise
set xtics "00:15"
##Range of intervals i.e. difference between two successive major tics on X-axis, it has another version which will set the start time and end time too having the format `set xtics "start", "interval", "end"` e.g. `set xtics "12:00", "00:30", "18:30"`. The end value can be omitted.
set grid xtics
##`set grid` will set grid on major tics (both X & Y), we can use `set grid xtics` to draw grids on `X` axis's majot tics only. Similar goes for `ytics` and minor tics `mxtics`, `mytics`.
unset mxtics
##This will unset minor tic-marks on the X-axis that occurs in between the major tics. To turn it on we can use `set mxtics`, this will sub-intervals with a frequency of 2-5 (Depending on input). We can set the number of sub-intervals for minor tics by `set mxtics <freq>` e.g. `set mxtics 2`, this will generate 2 sub-intervals i.e. 1 minor tic between 2 major tics.
#### Let's modify Y-axis parameters, on Y-axis we are plotting number of users i.e. positive integers so we don't have much to modify.
set ytics 500
set mytics 2
set ytics font ", 15"
set grid ytics mytics
set key off
##`set key` shows the options given to the `plot` command on the image, to turn it off we need `set key off`.
## Let's plot our data
plot "input.txt" using 1:2 with lines linewidth 10
##`plot` command is used to draw plots, `input.txt` is our input file having all the input data to be plotted. `using` option of `plot` tells which columns are to be plotted, `using 1:2` means plot column-1 and column-2 of input data where column-1 is matched against column-2. `with` defines the style we want to plot data as e.g. `with lines` will plot data with `lines` style. Some other styles are `impulses`, `dots`, `steps`, `points`, `labels`. We can also set other parameters like `linewidth`, `linecolor`, `linetype` of a style using appropriate options of `with`. For example to set a `linewidth` of 10 with the `lines` style we have used `with lines linewidth 10`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment