我无法使用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
如果我使用热图绘制它,如果我缩放x值使它们与y值处于相同的范围内似乎是正确的。
请在下面找到一个说明性示例。只有第二个图给出了热图的正确值(左上角是高值,右下角是低值):
set multiplot layout 2,1
set pm3d
set dgrid3d 20,20
set view map
set xlabel 'unscaled'
splot 'data.dat' u 1:2:3
set xlabel 'scaled by factor 1000'
splot 'data.dat' u ($1*1000):2:3
如何针对非缩放值实现此目的?
感谢任何帮助。非常感谢。
答案 0 :(得分:1)
你走了:
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
答案 1 :(得分:0)
缩放的情节看起来是正确的,但我不确定它是否真的是正确的。至少在左下角似乎有一个神器,一个局部最大值可能不应该存在。如果您删除set view map
:
我认为原因是dgrid3d
。它对相邻点进行了一些奇特的加权,这可能导致意想不到的结果。
我的建议是删除set dgrid3d 20,20
并使用set pm3d interpolate 20,20
来使用线性插值。这给出了以下图片:
最后,您的数据至少要求尝试一个logscale图:
我的最后一个剧情的剧本如下。与你的相比没什么特别的。我必须为未缩放的绘图指定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