Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

3-Dimensional Plot in GnuPlot where color is a fourth column in my data file?

I have a datafile that looks like this:

1   2   3   0.5
2   8   9   0.2
3   4   78  0.4
6   5   7   0.01
9   9   9   0.3
10  12  18  0.9
6   8   4   1

I would like to do a graph like this http://2.bp.blogspot.com/-378_rAaSSVU/UzU0gnGcr9I/AAAAAAAABnU/P1GwP9RKBkM/s1600/gnuplot.png Where the 4th column is the color.

I tried - obviously incorrect because I do not use the fourth column but I failed to find anything in the documentation:

set dgrid3d 30,30
set view 60,45
set hidden3d
dataFile='prova.dat'
set palette defined (0 "blue", 0.5 "white", 1 "pink")
set pm3d 
splot dataFile u 1:2:3 with pm3d

Is somethings like that possible?

like image 681
Naialeoque Avatar asked Aug 29 '14 17:08

Naialeoque


1 Answers

Using only pm3d you can use a fourth column to select a color independent of the z-value. Together with dgrid3d this is not directly possible, because the gridding is not performed on the color column.

You can use a workaround: First you plot the gridded z-value to one file, then the gridded color values to a second file and as last point you disable dgrid3d, merge the two temporary files on-the-fly and plot their values:

set dgrid3d 30,30
dataFile='prova.dat'

set table dataFile.'.grid'
splot dataFile u 1:2:3
unset table

set table dataFile.'.color'
splot dataFile u 1:2:4
unset table

set view 60,45
set hidden3d
set palette defined (0 "blue", 0.5 "white", 1 "pink")
set autoscale cbfix
set pm3d
unset dgrid3d
set ticslevel 0
splot sprintf('< paste %s.grid %s.color', dataFile, dataFile) u 1:2:3:7 with pm3d notitle

enter image description here

Note, that paste is a command line tool for Unix-like operation systems. For a similar solution for windows, you can e.g. write a small Python script paste.py (see my answer to Get ratio from 2 files in gnuplot for a possible implementation). Then you must run the wgnuplot_pipes.exe binary file and the splot command becomes

splot sprintf('< python paste.py %s.grid %s.color', dataFile, dataFile) u 1:2:3:7 with pm3d notitle

Of course, for this you must have python installed and the python binary must be available via the PATH environment variable.

like image 173
Christoph Avatar answered Jan 04 '23 14:01

Christoph