gnuplot - 从2d点变为热图

时间:2014-06-24 18:26:47

标签: gnuplot heatmap

我正在尝试将通常使用点的绘图转换为热图。数据采用x,y,z格式,x,y为lat / lon,z为记录实例的数量

我们目前正在使用:

plot 'data.dat' u 1:2:3 with points pointtype 13 lc palette, \
'boundary.dat' with lines ls 1

我希望能够将热图绘制为3个图: 1.基础热值图 2.指向可能50%的不透明度以显示潜在的地理路径 3.代表边界的线。

示例图片:enter image description here 左边的图像是gnuplot,右边的图像是qgis。我们希望gnuplot能够产生类似于右边的东西。

彼得

1 个答案:

答案 0 :(得分:1)

好问题:)

您需要几个步骤才能获得正确的结果:

要获得热图,您必须创建一个常规网格并插入数据。这可以使用set dgrid3d完成。因为您只想对某些数据进行插值,所以必须将插值写入临时文件:

set dgrid3d 200,200,2
set table 'data-heatmap.dat'
splot '< tr "," " " < data.dat' using 1:2:3
unset table
unset dgrid3d

通常,您可以使用set datafile separator ','将逗号用作分隔符,但使用临时文件data-heatmap.dat' contains columns separated by spaces, so you must use tr`将逗号替换为空格。

然后你可以一起画出来。完整的脚本可能如下所示:

# Diverging color palette from colorbrewer2.org
set palette defined (0 '#006837', 1 '#1a9850', 2 '#66bd63',\
                     3 '#a6d96a', 4 '#d9ef8b', 5 '#ffffbf',\
                     6 '#fee08b', 7 '#fdae61', 8 '#f46d43',\
                     9 '#df3027', 10 '#a50026')
unset key
set dgrid3d 200,200,2
set table 'data-heatmap.dat'
splot '< tr "," " " < data.dat' using 1:2:3
unset table
unset dgrid3d

set autoscale fix
set xtics 0.1
plot 'data-heatmap.dat' u 1:2:3 w image,\
     '< tr "," " " < boundary.dat' w l lc rgb 'black' lw 2,\
     '< tr "," " " < data.dat' w p pt 7 ps 0.2 lc palette

要获得更平滑的插值,请使用set dgrid3d 200,200,1或类似内容。也许您还希望使用set cbrange设置固定颜色范围。

4.6.5的结果是:

enter image description here

生成的网格的维度是从分散数据的边界框导出的。作为扩展插值区域的黑客,您可以在创建插值数据时动态添加两个虚拟点:右上角一个点,左上角一个点。稍后您可以使用set offsets

更正这些点
# Diverging color palette from colorbrewer2.org
set palette defined (0 '#006837', 1 '#1a9850', 2 '#66bd63',\
                     3 '#a6d96a', 4 '#d9ef8b', 5 '#ffffbf',\
                     6 '#fee08b', 7 '#fdae61', 8 '#f46d43',\
                     9 '#df3027', 10 '#a50026')
unset key
set dgrid3d 200,200,2
set table 'data-heatmap.dat'
splot '< echo -e "\n-118.62,34.29,1\n-118.10,34.29,1" | paste -s -d "\n" data.dat - | tr "," " "' using 1:2:3
unset table
unset dgrid3d

set autoscale fix
set offsets -0.02,-0.01,-0.01,0.01
set xtics 0.1
plot 'data-heatmap.dat' u 1:2:3 w image,\
     '< tr "," " " < boundary.dat' w l lc rgb 'black' lw 2,\
     '< tr "," " " < data.dat' w p pt 7 ps 0.2 lc palette

enter image description here