Gnuplotting

Create scientific plots using gnuplot

June 9th, 2010 | 11 Comments

If you have measurement data and like to plot them as points combined by lines, you will probably do that with the `linespoints` plotting style. But for some applications it is required to combine the data points by non-continuous lines to emphasize that the data came from measurements as shown in Fig. 1.

In Gnuplot exists no line style that can do this directly. But with a little trick it is very easy to achieve. Since Gnuplot 4.4. there exists the property `pointinterval` (see the documentation) in combination with the plotting style ` linespoints`. This property plots not every single point, but only every second for a value of `2` and so on. But if we use the value `-1` it tells Gnuplot to insert a little gap between the points and the line. The size of the gap can be set by the `pointintervalbox` property.

```set style line 1 lc rgb '#0060ad' lt 1 lw 2 pt 7 pi -1 ps 1.5
set pointintervalbox 3
```

We specify a point interval `pi` of -1 and a point size of 1.5, in addition we set the the gap to a point size of 3. Now we can plot our data with the `linespoints` style.

```plot 'plotting_data1.dat' with linespoints ls 1
```

Using the same data as in the first plot of the gnuplot basics tutorial Plotting data we will get Fig. 1 as a result.

April 27th, 2010 | 51 Comments

Plotting data like measurement results is probably the most used method of plotting in gnuplot. It works basically like the plotting of functions. But in this case we need a data file and some commands to manipulate the data. First, we will start with the basic plotting of simple data and thereafter look at the plotting of data with errors.

Simple data

At first we will have a look at a data file. This can be a text file containing the datapoints as columns.

```# plotting_data1.dat
# X   Y
1   2
2   3
3   2
4   1
```

You can plot these by writing

```# Set linestyle 1 to blue (#0060ad)
set style line 1 \
linetype 1 linewidth 2 \
pointtype 7 pointsize 1.5

plot 'plotting_data1.dat' with linespoints linestyle 1
```

Here we also set the point type (pt) and the point size (ps) to use. For the available point styles you can have a look at the ps_symbols file. The resulting plot is presented in Fig. 1.

If you have data points that aren’t continuous you can simply tell gnuplot this by inserting one blank line between the data.

```# plotting_data2.dat
# X   Y
1   2
2   3

3   2
4   1
```

If you want to use another color for the second data and still want to have it in the same file, you can insert a second blank line. You then have to index the data block starting by 0.

```# plotting_data3.dat
# First data block (index 0)
# X   Y
1   2
2   3

# Second index block (index 1)
# X   Y
3   2
4   1
```
```# Set first two line styles to blue (#0060ad) and red (#dd181f)
set style line 1 \
linetype 1 linewidth 2 \
pointtype 7 pointsize 1.5
set style line 2 \
linecolor rgb '#dd181f' \
linetype 1 linewidth 2 \
pointtype 5 pointsize 1.5

plot 'plotting_data3.dat' index 0 with linespoints linestyle 1, \
''                   index 1 with linespoints linestyle 2
```

As you can see, we have added another color and point type and plotted the two datasets by using index and separated the plots by a comma. To reuse the last filename we can just type `''`. The result is shown in Fig. 3.

Data with errors

Another common task is to plot data with errorbars. Therefore we use the battery.dat file from gnuplots demo files that contains data about the dependence of the power of the battery on the resistance.
Here we want not only to plot the data, but also show the error for the y value (the data is stored in the format: x, y, xerror, yerror).

```set xrange [-2:52]
set yrange [0:0.12]
set format y '%.0s'
plot 'battery.dat' using 1:2:4 with yerrorbars linestyle 1, \
''                        with lines linestyle 1
```

The power values are stored in Watt in the data file, but only has values lower than 1. That’s why we want to use mW as unit. Therefore we set the format option to tell gnuplot to use “mantissa to base of current logscale”, see gnuplot’s documentation. Then in the plot command `using` tells gnuplot which columns from the data file it should use. Since we want to plot the y errors and the data we need three columns in the first line of the plot command. Using the `yerrorbars` plotting style it is not possible to combine the points by a line. Therefore we add a second line to the plot command to combine the points with a line. This will give us the resulting Fig. 4.

We can avoid the `set format` command in the last plot by directly manipulating the input data:

```set yrange [0:120]
plot 'battery.dat' using 1:(\$2*1000):(\$4*1000) with yerrorbars linestyle 1
```

For achieving this we have to set brackets around the expression and reference the column data with `\$column_number`.

In the last plot we will add theoretical data and a legend to the graph:

```# Legend
set key at 50,112
# Theoretical curve
P(x) = 1.53**2 * x/(5.67+x)**2 * 1000
plot 'battery.dat' using 1:(\$2*1000):(\$4*1000) \
title 'Power' with yerrorbars linestyle 2, \
P(x) title 'Theory' with lines linestyle 1
```

Generally the legend is enabled by the `set key` command. In addition to that, its position can be specified by `set key top left` etc. You can also set it directly to one point as we have done it here in order to have enough space between the key and the tics. The `title` keyword within the plot command specifies the text to be displayed in the legend.

Now you should be able to plot your own data with gnuplot. You may also want to look at how to plot functions, or dealing with gnuplot’s different output terminals.