8

我有一个看起来像这样的数据文件:

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 其中第 4 列是颜色。

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

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

这样的事情可能吗?

4

1 回答 1

7

仅使用pm3d您可以使用第四列来选择独立于 z 值的颜色。与dgrid3d此一起是不可能的,因为网格不是在颜色列上执行的。

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

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 脚本(请参阅我对Get ratio from 2 files in gnuplotpaste.py的回答以获取可能的实现)。然后你必须运行二进制文件,命令变成wgnuplot_pipes.exesplot

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

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

于 2014-08-29T17:37:34.537 回答