使用GNUPLOT离散热图

时间:2017-03-11 22:07:33

标签: gnuplot

我正在尝试使用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

我需要每个点都有一种颜色,具体取决于它的值。传统的热图混合了连续颜色的点制作区域,但我需要它以离散的形式。

2 个答案:

答案 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一起使用。

一起,然后产生: enter image description here

相关问题