September 26th, 2011 |
8 Comments

If you have not only some data points or a line to plot but a whole matrix, you could plot its values using different colors as shown in the example plot in Fig. 1. Here a 2D slice of the 3D modulation transfer function of a digital breast tomosynthesis system is presented, thanks to Nicholas Marshall from UZ Gasthuisberg (Leuven) for sharing the data.

All we need to create such a plot is the `image`

plot style, and of course the data have to be in a proper format. Suppose the following matrix which represents z-values of a measurement.

0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 3 2 1 0

In order to plot these values in different gray color tones, we specify the corresponding `palette`

. In addition we apply the above mentioned `image`

plot style and the `matrix`

format option. The result is shown in Fig. 2.

set palette grey
plot 'color_map.dat' matrix with image

One remaining problem with Fig. 2 is, that the values on the x- and y-axis are probably not the one which you want, but the corresponding row and column numbers. One way to get the desired values is the `use`

command, which can also be used with `image`

. See Fig. 3 for the result.

plot 'color_map.dat' u (($1-4)/10):2:3 matrix w image

Another way is to store the axes vectors together with the data. Therefore the data has to be stored as a `binary`

matrix. The format of this matrix has to be the following:

<M> <y1> <y2> <y3> ... <yN>
<x1> <z1,1> <z1,2> <z1,3> ... <z1,N>
<x2> <z2,1> <z2,2> <z2,3> ... <z2,N>
: : : : ... :
<xM> <zM,1> <zM,2> <zM,3> ... <zM,N>

In Matlab/Octave the binary matrix can be stored using this m-file. The stored binary matrix can then be plotted by adding the `binary`

indicator to the `plot`

command.

plot 'color_map.bin' binary matrix with image

Note that in principle a color map can also be created by the `splot`

command:

set pm3d map
splot 'data.dat' matrix

But if you create vector graphics with this command you will get a really big output file, because every single point will be drawn separately. For example check the graph from Fig. 1 as pdf created with plot and image and as pdf created with splot and pm3d map.