我有一个如下所示的数据文件:
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
有可能这样的事吗?
答案 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
请注意,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二进制文件。