使用pm3d和dgrid3d的Gnuplot热图在图中留下了空白区域

时间:2018-05-12 19:40:02

标签: gnuplot heatmap

我试图像数据中的情节一样生成热图。数据以

的形式给出
# x      y      f(x,y)
 1.02   0.98    23.943
 1.99   0.99    24.05
 .99    2.01    22.00
...

并且没有真正的网格,它们只是一些随机点及其特定值。否则,据我所知,我可以使用像image这样的东西。

为了说明我的问题,我为2d高斯峰创建了一个数据文件(参见pastebin)。数据说明:

simple splot of data file

现在使用

绘制此图
set view map
set dgrid3d 50,50,2
set pm3d at b
unset key
unset surface
splot "data.txt"    # using 2d gauss data as example

给我一​​个如下的情节:

splot using pm3d, dgrid3d, map

我不明白的是彩色表面和地块实际边界之间的空白区域。这里显示在底部,顶部,右侧和左侧。即使我放大范围,应该使用dgrid3d创建表面,白色空间仍然有不同的宽度。

现在尝试绘制(使用上面的设置)

set isosample 100,100
splot exp(-x**2 -y**2)

给了我一个填充整个绘图区域的图。无论我放大或缩小多远。任何地方都不会出现空格。参见:

function plot using pm3d dgrid3d

我在这里发现了这篇文章(Annoying spacing in gnuplot pm3d color maps),其中op回复说,即使通过绘制函数,空格仍然存在:

  

我刚尝试绘制一个简单的exp(-x²),但差距仍然存在。 :/ - stonebird 2016年6月6日10:31

但是,他可以通过为xy值定义一个非常具体的范围来解决此问题。但这对我不起作用,因为很难找出这个实际上有效的值。

是否有可能从填充整个绘图区域的数据点创建热图,如图?

使用gnuplot 5.0 patchlevel 6

1 个答案:

答案 0 :(得分:1)

这是网格的固有问题(+与pm3d相似)。来自help dgrid3d

为绘图和轮廓线创建一个网格,其尺寸派生自散布数据的边界框和由行/ col_size参数指定的大小。

Gnuplot首先删除x / yranges内的所有数据点,然后在那些数据点上创建一个边界框(可能稍微小一些),然后才创建网格化数据。

理想情况下,应该能够关闭这个边界框的创建,并让gnuplot只生成一个跨越整个x / yrange的网格。

解决这个问题的方法是使用set table将网格化数据绘制到文件(或者,因为gp5,到内联$ datablock),然后关闭dgrid3d,并绘制此数据块。然后你仍然必须精确缩放到具有数据点的min / max x / y值(以摆脱空白),但你至少可以轻松地查看它们。

Oooor跳过数据块创建并自动剪切放大视图:

  1. 使用pm3d / dgrid3d
  2. 绘制数据集
  3. 放大您想要的区域
  4. 现在通过

    切断空白区域
    set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX]
    set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
    replot
    
  5. 问题是你可能再次在边框处有人工制品,所以也许你仍然想要将网格与绘图分开,如上所述。

        set dgrid3d
        set table $datagrid
        splot dataf
        unset table
        unset dgrid3d
    
        set pm3d; set view map
        splot $datagrid
        #now zoom to whatever view you would like to see
    
        set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX]
        set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
        replot
    

    (也请查看help dgrid3d以选择合适的插值算法/内核)