Gnuplot

Basic plotting of data files

Introduction#

One of the main useful features of gnuplot is the possibility of plotting data files. Plotting a data file is really simple with gnuplot, actually, once you have opened the software from the terminal, you only need to digit the command plot 'file' to get an automatic plot.

First of all, before plotting, you must be sure to be under the same directory where the data file is, otherwise you’ll eventually get a warning.

Syntax#

  • plot datafile using column_expression with style

Plot a single data file

The default gnuplot command plot (also only p) plot dataset with columns, of the form of the data_set.dat file below.

# Prototype of a gnuplot data set
# data_set.dat
# X -   X^2 -    2*X -    Random 
0       0        0        5
1       1        2        15
1.4142  2        2.8284   1
2       4        4        30
3       9        6        26.46
3.1415  9.8696   6.2832   39.11
4       16       8        20
4.5627  20.8182  9.1254   17 
5.0     25.0     10.0     25.50
6       36       12       0.908

As you can see you can write in your data set in floating point notation. Now everything is ready to make the data plot: by typing only

plot "data_set.dat"

gnuplot will produce a graph in your output destination. The default settings will use the first two columns of your data file, respectively x and y. To specify the columns to be plotted use the using specifier

plot "data_set.dat" using 2:4

which means “plot the file using column 2 as X and column 4 as Y”. In the case your data set is a tridimensional file just use splot ad add the z-column

splot "data_set.dat" using 1:2:3

There are also different style (see gnuplot documentation or Selecting a plotting style for further infos) for plotting points. As said before, the default style is point

plot "data_set.dat" using 1:4 with point

which will plot the same as if you do not type with point. An useful style for data plotting is linespoint which is, obviously, “lines + points”. E.G.:

plot "data_set.dat" using 1:4 with linespoint
# the abbreviated form is completely equivalent:
# p "data_set.dat" u 1:4 w lp

linespoint

Forms of plotting iteration

In the case you have more columns and want to plot them all in the same graph just pass to the plot function any argument you prefer, by separating them with a ,:

p "data_set.dat" u 1:2 w lp,\
    "data_set.dat" u 1:3 w lp,\
    "data_set.dat" u 1:4 w lp

Anyway sometimes there could be too much columns to write one by one. In these case the for iteration loop results very useful:

p for [col = 2:4] "data_set.dat" using 1:col w lp

which gives the output

Iterated plot

Briefly the for iteration increment the variable in the loop, in this case col, with a decided steps (if not specified = 1). For example for [i = 0:6:2] will increment i from 0 to 6 in 2 steps: i = 0, 2, 4, 6. All values (start, stop and increment) are casted to integer values.

*Grid

The grid is often useful when plotting a data set. To add a grid type

set grid

Plotting multiple data files

First method - Concatenation of strings

The simplest method to plot multiple data files is to insert a for loop inside the plot command of gnuplot. Assuming you have N files named sequently, i.e.

file_1.dat
file_2.dat
file_3.dat
...
file_N.dat

Executing the command

plot for[i = 1:N] "file_".i.".dat" 

will plot all the files between file_1.dat and file_N.dat in the same graph.


Example with three data files

Table of datasets

X-Axes Y-Axe file_1.dat Y-Axe file_2.dat Y-Axe file_3.dat
1 1 1 1
2 2 4 2
3 3 9 6
4 4 16 24
5 5 25 120

Commands

set terminal postscript color noenhanced ##setting the term
set output "multiple_files.ps"

set key center ##legend placement

plot [1:5][1:120] \
    for [i = 1:3] "file_".i.".dat" \
    pointsize 1.3 linecolor i+4 \
    title "file\_".i.".dat" \
    with linespoint

The loop starts with for [i = 1:3] "file_".i.".dat" and execute the plot command until it reaches i = 3. The .i. is the concatenated number.

title "file\_".i.".dat" has been written with the \ in order to make the _ symbol in the name of the files appears as an underscore rather than a subscript, and noenhanced specifier is fundamental to obtain this result.

The final result is shown below

The example plot


Second method - Using sprintf function

Another possible path to follow is using the sprintf function that works basically the same as the C-language sprintf. The right syntax, from the gnuplot 5.1 documentation is

sprintf("format", x, y, ...)

A brief example will clarify every doubt.

file_name(n) = sprintf("file_%d.dat", n)
plot for[i = 1:N] file_name(i) title file_name(i)

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow