gnuplot / datafile (2E)

Plotting Numerical Data in a Data File (No.2)

How do I plot several data sets in a single file ?

In order to plot several data those are stored in one file, use
using and index.
Here, “data” means a set of XY pairs. Gnuplot draws one line or
prints the same symbol at each data-point.

When those data have the same X-values, prepare the
data in a table format, and use the using option to specifiy
Y-data. The next example file contains three Y-values at the same X-value.

#   X         Y1         Y2         Y3
-1.0000    0.0000     0.0000     1.0000
-0.9000    0.5700     1.1769     0.7150
-0.8000    1.0800     1.4400     0.4600
-0.7000    1.5300     1.4997     0.2350
-0.6000    1.9200     1.4400     0.0400
-0.5000    2.2500     1.2990    -0.1250
-0.4000    2.5200     1.0998    -0.2600
-0.3000    2.7300     0.8585    -0.3650
-0.2000    2.8800     0.5879    -0.4400
-0.1000    2.9700     0.2985    -0.4850
0.0000    3.0000    -0.0000    -0.5000
0.1000    2.9700    -0.2985    -0.4850
0.2000    2.8800    -0.5879    -0.4400
0.3000    2.7300    -0.8585    -0.3650
0.4000    2.5200    -1.0998    -0.2600
0.5000    2.2500    -1.2990    -0.1250
0.6000    1.9200    -1.4400     0.0400
0.7000    1.5300    -1.4997     0.2350
0.8000    1.0800    -1.4400     0.4600
0.9000    0.5700    -1.1769     0.7150
1.0000    0.0000    -0.0000     1.0000
gnuplot> plot "test.dat" using 1:2 with lines,
"test.dat" using 1:3 with lines,
"test.dat" using 1:4 with lines
fig/sample7.2a

When the X-values are different, the whole data are separated into
several blocks, and put two blank lines between the each block.
(Note: here we use the term “block” for a set of data points in a
general meaning, and this is different from the gnuplot’s definition
of “datablock”. The datablock in gnuplot is a set of data points
separated by a single blank line.)

#  X     Y     Yerror
1.0   1.2   0.1
2.0   1.8   0.1
3.0   1.6   0.1


1.1   0.8   0.2
2.1   0.3   0.2
3.1   1.0   0.2


1.2   1.5   0.3
2.2   2.3   0.3
3.2   3.1   0.3
gnuplot> plot "test.dat" using 1:2 with lines
fig/sample7.2b
gnuplot> plot "test.dat" using 1:2:3 with yerrorbars
fig/sample7.2c

As you can see above, all the data in the different data blocks
are drawn by the same line/symbol type. To make them different,
specify a data block by index .
The first data block has an index of zero, the second is one, and so
on.

gnuplot> plot "test.dat" index 0 using 1:2:3 with yerrorbars,
"test.dat" index 1 using 1:2:3 with yerrorbars,
"test.dat" index 2 using 1:2:3 with yerrorbars
fig/sample7.2d

You can specify the range of index. For example, to use the same
symbol for the first and second blocks, and change the symbol for the
third block:

gnuplot> plot "test.dat" index 0:1 using 1:2:3 with yerrorbars,
"test.dat" index 2   using 1:2:3 with yerrorbars
fig/sample7.2e

I want to modify values in my data file when plotting.

You can make some simple calculations and change the data of the
column which is specified by the using option.
With the following data we show four
cases simultaneously — Y-values themselves, Y-values are doubled,
squared, and logarithm is taken.

#  X     Y
1.0   1.2
2.0   1.8
3.0   1.6
gnuplot> plot "test.dat" using 1:2          with points,
"test.dat" using 1:($2*2)     with points,
"test.dat" using 1:(sqrt($2)) with points,
"test.dat" using 1:(log($2))  with points

fig/sample7.3

Specify the n-th column by $n , and make some
operation. The expression should be put into parenthesis. An
expression like using 1:sqrt($2) does not work. You can
also make some calculations which need several columns. For
example, using 1:2:($2*$3) makes a product of the second and
third columns.


Sometimes this technique is useful when you have a data file
which contains Y-value uncertainties, and the uncertainties are
represented by a relative error (%). To draw error bars your
data uncertainties should be absolute. To convert from relative
uncertainties into absolute ones, using 1:2:($2*$3/100.0),
where the second column is the Y-data, and the third column is the
percent errors.

I want to put some plotting commands in a data file.

Gnuplot uses two files, one is the data and another is the control
command. If your data are not so complicated, you can put the plot
command into one file together with the data themselves. Basically it
is the same as a usual command file, but the data file to be plotted
is not an external one but it is just “-“, and the numerical data
follow. Gnuplot stops reading the data when a line begins with the
letter “e”.

set xrange [0:5]
set yrange [0:3]
plot "-" using 1:2:3 w yerrorbars
#  X     Y     Z
1.0   1.2   0.2
2.0   1.8   0.3
3.0   1.6   0.2
4.0   1.2   0.2
end
pause -1

Prepare a control file which includes the data just like above,
and give the name as a command line option when gnuplot is
invoked.

% gnuplot "test.plt"

By the way, you cannot use the replot command in this
method. Gnuplot tries to read the data from the standard input
again, because Gnuplot does not remember the data.

I want to eliminate some data points.

There are two ways to skip some data in a data file — the first
one is to edit the data file, alternatively you can use the every option.
To skip some points in your data by editing the data file, put some
letter like “?” just before the number. This letter is defined by the
set missing command, but any
kinds of letters which cannot be converted into numbers work too.

The next example is to draw graphs of (X,Y1) and (X,Y2).

test1.dat test2.dat
#  X     Y1    Y2
1.0   1.2   1.5
?2.0   1.8   0.8
3.0   1.6   1.1
#  X     Y1    Y2
1.0   1.2   1.5
2.0   1.8  ?0.8
3.0   1.6   1.1

In the left drawing, the second X value has “?” mark, so that
the second data points (2.0,1.8) and (2.0,0.8) are skipped. In the
right drawing, the point (2.0,1.8) still is alive, but
(2.0,0.8) is erased.

gnuplot> plot "test1.dat" using 1:2 with linespoints,
"test1.dat" using 1:3 with linespoints
fig/sample7.5a
gnuplot> plot "test2.dat" using 1:2 with linespoints,
"test2.dat" using 1:3 with linespoints
fig/sample7.5b

This function is useful if you want to alter the range
of plot in a table formatted data. Let’s plot the following data
in log-scale, the second (Y1) and the third (Y2) columns are
plotted simultaneously.

#  X     Y1    Y2
1.0   0.0   0.1
2.0   0.0   0.1
3.0   0.0   0.1
4.0   0.1   0.2
5.0   0.6   0.4
6.0   1.0   0.9
7.0   1.2   1.7
8.0   1.3   2.4

The Y1-values are zero in the X range of [1:3], so you cannot
take log here. Gnuplot produces a vertical line at the lowest
point which has a positive value (here, that is X=4).

fig/sample7.5c

To remove this vertical line, put “?” at Y1=0.0, like “?0.0”.
Then the Y1 data (the red line) are treated as that they begin at X=4.
The same thing you can do with the plot command option
every ::3 . See the next topic.

fig/sample7.5d

How do I plot a part of data in a file ?

To specify a range of the data to be plotted, use the every
option in the plot command. To skip every two lines, say
plot "test.dat" every 2

.

When the data file contains several data blocks those are separated
by a single blank line, you can skip the data block by the
every
option. To skip every two block, try plot
"test.dat" every :2

.

every I:J:K:L:M:N
I Line increment
J Data block increment
K The first line
L The first data block
M The last line
N The last data block
every 2 plot every 2 line
every ::3 plot from the 3-rd lines
every ::3::5 plot from the 3-rd to 5-th lines
every ::0::0 plot the first line only
every 2::::6 plot the 1,3,5,7-th lines
every :2 plot every 2 data block
every :::5::8 plot from 5-th to 8-th data blocks

Alternatively (if you are on the UNIX-like system),
a part of your data file can be plotted by using the unix commands, “head” and “tail”.

gnuplot> plot "< head -10 test.dat" using 1:2 with lines
gnuplot> plot "< tail -3 test.dat" using 1:2 with lines
gnuplot> plot "< head -5 test.dat" using 1:2 with lines,
>        plot "< tail -5 test.dat" using 1:2 with points

The first “plot” command says to plot the first 10 lines in the
data file “test.dat”, and the second “plot” means to show the last 3
lines in the data file. The next lines are an example to draw a graph
of the data file “test.dat” — the first 5 points are shown by lines,
and the last 5 points are by symbols.

from an Iwata-kun’s question. Thanks !
up