不同比例尺的gnuplot热图
我很难用gnuplot为不同比例的数据创建热图 考虑以下示例数据集:不同比例尺的gnuplot热图,gnuplot,heatmap,Gnuplot,Heatmap,我很难用gnuplot为不同比例的数据创建热图 考虑以下示例数据集: 0.100 1.000 10.0 0.010 1.000 20.0 0.001 1.000 40.0 0.100 10.00 20.0 0.010 10.00 40.0 0.001 10.00 80.0 0.100 100.0 40.0 0.010 100.0 80.0 0.001 100.0 160
0.100 1.000 10.0
0.010 1.000 20.0
0.001 1.000 40.0
0.100 10.00 20.0
0.010 10.00 40.0
0.001 10.00 80.0
0.100 100.0 40.0
0.010 100.0 80.0
0.001 100.0 160.0
如果我使用热图来绘制它,只有当我缩放x值,使其与y值处于相同范围时,它才似乎是正确的
请在下面找到一个示例。只有第二个图给出了热图的正确值(左上角为高值,右下角为低值):
对于非缩放值,如何实现这一点
感谢您的帮助。非常感谢。给你:
set dgrid3d 20,20
set pm3d explicit
set view map
set table "interpolated_data.dat"
splot 'data.dat' using ($1*1000):2:3
set output 'heatmap.png'
set terminal pngcairo
set multiplot layout 2,1
unset table
unset dgrid3d
set pm3d
unset surface
set xlabel 'scaled by factor 1000'
splot 'interpolated_data.dat' u 1:2:3
set xlabel 'unscaled'
splot 'interpolated_data.dat' u ($1/1000):2:3
比例图看起来正确,但我不确定它是否真的正确。至少在左下角似乎有一个伪影,一个可能不应该存在的局部最大值。如果删除
set view map
,您可以更好地查看它:
我认为原因在于dgrid3d
。它会对相邻点进行一些奇特的加权,这可能会导致意外的结果
我的建议是通过删除set dgrid3d 20,20
和使用set pm3d interpolate 20,20
来使用线性插值。这给出了以下图片:
最后,您的数据要求至少尝试对数比例图:
最后一个情节的剧本如下。和你的相比没什么特别的。我必须为未缩放的绘图指定xrange,因为有4个绘图,所以它更长
reset
set terminal png size 1200,800
set output "data_log.png"
set logscale x
set logscale y
set multiplot layout 2,2 title "With \"interpolate\" and logscale"
set pm3d at s interpolate 20,20
set hidden3d
set xlabel 'unscaled'
set origin 0.5,0.5
set xrange [0.001:0.1]
splot 'data.dat' u 1:2:3 notitle
set autoscale x
set xlabel 'scaled by factor 1000'
set origin 0.5,0.0
splot 'data.dat' u ($1*1000):2:3 notitle
set view map
set xlabel 'unscaled'
set origin 0.0,0.5
set xrange [0.001:0.1]
splot 'data.dat' u 1:2:3 notitle
set autoscale x
set xlabel 'scaled by factor 1000'
set origin 0.0,0.0
splot 'data.dat' u ($1*1000):2:3 notitle
unset multiplot
set output
不客气。如果答案解决了您的问题,请随时接受。此外:
set dgrid3d 20,20
相当于set dgrid3d 20,20 qnorm
。参数qnorm
通过系数(dx^2+dy^2)^norm/2对生成的网格上的所有点进行加权,如果x和y比例非常不同,这可能不是我们所期望的。@Christoph。有见地的评论,谢谢。你看了吗?
reset
set terminal png size 1200,800
set output "data_log.png"
set logscale x
set logscale y
set multiplot layout 2,2 title "With \"interpolate\" and logscale"
set pm3d at s interpolate 20,20
set hidden3d
set xlabel 'unscaled'
set origin 0.5,0.5
set xrange [0.001:0.1]
splot 'data.dat' u 1:2:3 notitle
set autoscale x
set xlabel 'scaled by factor 1000'
set origin 0.5,0.0
splot 'data.dat' u ($1*1000):2:3 notitle
set view map
set xlabel 'unscaled'
set origin 0.0,0.5
set xrange [0.001:0.1]
splot 'data.dat' u 1:2:3 notitle
set autoscale x
set xlabel 'scaled by factor 1000'
set origin 0.0,0.0
splot 'data.dat' u ($1*1000):2:3 notitle
unset multiplot
set output