我正在尝试使用GNUPLOT创建一个热图,但我需要我的调色板为定义的值采用离散颜色。
我的意思是,我的数据文件有三列,例如:
x y值
0.0 0.0 10
0.0 0.5 2
0.0 1.0 2
0.5 1.0 10
1.0 0.0 -1
1.0 1.0 -1
我需要每个点都有一种颜色,具体取决于它的值。传统的热图混合了连续颜色的点制作区域,但我需要它以离散的形式。
答案 0 :(得分:0)
在一些摆弄之后,这可能会做你想要的:
set view map
set style fill transparent solid noborder
splot 'data' u 1:2:3:(100+200*$3) pt 5 lc rgbcolor var ps 14
pt 5
将在数据文件中的每个点绘制一个正方形(至少在x11项中),根据最后一列的变换进行着色。
答案 1 :(得分:0)
如果您的数据形成“矩阵”,即有M个样本,N个y样本,并且您拥有所有MxN点的数据,则可能最简单的解决方案是使用
plot ... w rgbimage u 1:2:(r($3)):(g($3)):(b($3))
并将r,g,b值作为三个附加列提供,如上所示。
但是,如果您的数据“稀疏”(只有部分样本可用,如您的问题中所示)并且点数不多,则可能会尝试生成手动形成图表的基本方块。为此,可以继续:
set terminal png enhanced
set output 'plot.png'
#custom value -> color mapping
rgb(r, g, b) = 65536 * int(r) + 256 * int(g) + int(b)
fn(val) = rgb(100 + val*10, 0, 0)
#square size
delta = 0.5
set xr [-delta/2:1+delta/2]
set yr [-delta/2:1+delta/2]
set xtics 0,delta/2,1 out nomirror
set ytics 0,delta/2,1 out nomirror
set format x "%.2f"
set format y "%.2f"
set size ratio 1
unset key
fName="test.dat"
load sprintf("<gawk -v d=%f -f parse.awk %s", delta, fName)
plot fName u 1:2:3 w labels tc rgb 'white'
此脚本假定在同一目录中存在辅助gawk脚本parse.awk
:
{
printf "set object rectangle from %f,%f to %f,%f fc rgb fn(%d) fs solid\n",
$1-d/2, $2-d/2, $1+d/2, $2+d/2, $3
}
此脚本接受所需的方形大小(在调用gawk时为-v d=%f
),并为每个点生成一个生成相应方块的语句。因此,这些语句由load
命令执行。
颜色的映射是通过主Gnuplot脚本中定义的函数fn
完成的。它接受传递的值并生成一个rgb值,然后在fc rgb
规范中与rectangle
一起使用。