GnuPlot中的三维图,其中颜色是我数据文件中的第四列?

时间:2014-08-29 17:18:28

标签: graph colors gnuplot 4d

我有一个如下所示的数据文件:

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

我想做一个这样的图表 http://2.bp.blogspot.com/-378_rAaSSVU/UzU0gnGcr9I/AAAAAAAABnU/P1GwP9RKBkM/s1600/gnuplot.png 第四列是颜色。

我试过 - 显然不正确,因为我没有使用第四列,但我在文档中找不到任何内容:

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

有可能这样的事吗?

1 个答案:

答案 0 :(得分:6)

仅使用pm3d,您可以使用第四列选择独立于z值的颜色。与dgrid3d一起,这不可能直接实现,因为不会在颜色列上执行网格化。

您可以使用解决方法:首先将网格化z值绘制为一个文件,然后将网格化颜色值绘制为第二个文件,最后一点禁用dgrid3d,将两个临时文件合并到-fly并绘制他们的价值观:

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

请注意,paste是类Unix操作系统的命令行工具。对于Windows的类似解决方案,您可以例如编写一个小的Python脚本paste.py(请参阅我对Get ratio from 2 files in gnuplot的回答以获得可能的实现)。然后,您必须运行wgnuplot_pipes.exe二进制文件,splot命令变为

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

当然,为此必须安装python,并且必须通过PATH环境变量提供python二进制文件。