Turn x-y-z formatted data into a grid of z, for Gnuplot

Posted: October 15, 2015
Categories: hack, gnuplot, linux

If it happens that you want to create a surface in Gnuplot, and you have your data formatted this way:

x1 y1 value1
x1 y2 value1
x2 y1 value3
x2 y2 value4

You will have to turn it into such a grid:

value1 value2
value3 value4

in order for Gnuplot to plot it easily (that is, without you describing your data format and telling which fields to extract).

To do so, you can use a combination of cut and the xargs -L <N> echo trick. cut will extract the right column, the third one in our case, while xargs -L 2 will group lines by 2. Feeding this to echo will display our blocks and add a newline between them. Naturally, replace 2 by the width of the desired grid.

You should obtain something alike:

cat input-file | cut -d' ' -f3 | xargs -L 6 echo > output-file

And your output-file is ready to represent a Gnuplot surface.

My 2 cents! Hope that helps.