gnuplot热图与不同的尺度

时间:2016-11-22 08:58:40

标签: 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

如果我使用热图绘制它,如果我缩放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

如何针对非缩放值实现此目的?

感谢任何帮助。非常感谢。

2 个答案:

答案 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

,则可以更好地查看

original plot

我认为原因是dgrid3d。它对相邻点进行了一些奇特的加权,这可能导致意想不到的结果。

我的建议是删除set dgrid3d 20,20并使用set pm3d interpolate 20,20来使用线性插值。这给出了以下图片:

linear interpolation

最后,您的数据至少要求尝试一个logscale图:

interpolate and 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