我正在尝试将通常使用点的绘图转换为热图。数据采用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.代表边界的线。
示例图片: 左边的图像是gnuplot,右边的图像是qgis。我们希望gnuplot能够产生类似于右边的东西。
彼得
答案 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的结果是:
生成的网格的维度是从分散数据的边界框导出的。作为扩展插值区域的黑客,您可以在创建插值数据时动态添加两个虚拟点:右上角一个点,左上角一个点。稍后您可以使用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