【问题标题】:Gnuplot heat map using pm3d and dgrid3d leaves white spaces in plot使用 pm3d 和 dgrid3d 的 Gnuplot 热图在图中留下空白
【发布时间】:2018-10-22 22:02:45
【问题描述】:

我正在尝试从数据中生成热图,例如绘图。数据以

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

上面没有真正的网格,它们只是一些随机点和它们的特定值。否则,据我所知,我可以使用image 之类的东西。

为了说明我的问题,我为二维高斯峰值创建了一个数据文件(请参阅pastebin)。数据说明:

现在使用

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

给我一​​个类似下面的情节:

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

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

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

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

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

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

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

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

使用 gnuplot 5.0 补丁级别 6

【问题讨论】:

  • set autoscale xfix; set autoscale yfix
  • @Christoph 这适用于适合文件中存在的所有数据。白色的缝隙消失了。谢谢你。然而,当放大时(例如去掉 dgrid3d 生成的波纹边框数据),空白会返回。我试过 'set autoscale keepfix' 但这不起作用。
  • @DirkK。当然:当您开始缩放时,自动缩放会被关闭。 ;-)
  • 您可以在线生成示例数据集,在 gnuplot 中:set table $dataset; splot "+" us (x=(rand(0)-.5)*6):(y=(rand(0)-.5)*6):(exp(-(x**2+y**2))); unset table

标签: gnuplot heatmap


【解决方案1】:

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

创建一个网格,其尺寸源自分散数据的边界框和由 row/col_size 参数指定的大小,用于绘图和轮廓绘制。

Gnuplot 首先删除 x/y 范围内的所有数据点,然后在这些数据点上创建一个边界框(可能会更小一些),然后才创建网格数据。

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

解决这个问题的方法是使用set table 将网格化数据绘制到文件(或者,从 gp5 开始,绘制到内联 $datablock),然后关闭 dgrid3d,并绘制此数据块。然后您仍然必须精确缩放到具有数据点的最小/最大 x/y 值(以消除空白),但您至少可以轻松查找这些值。

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

  1. 使用 pm3d / dgrid3d 绘制数据集
  2. 放大到您想要拥有的区域
  3. 现在通过做来切断空白

    set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX]
    set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
    replot
    

问题是您可能在边界处再次出现伪影,因此您可能仍希望如上所述将网格与绘图分开。

    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 以选择合适的插值算法/内核)

【讨论】:

  • 单独使用set xrangeset yrange 似乎对我不起作用。但是使用set table $datagrid 然后重置范围的解决方法效果很好。可能会增加网格点以避免从所需的 xranges/yranges 到实际绘图范围的太大跳跃。谢谢。
  • @DirkK。有趣的是,你做的事情一定和我有点不同。也许在缩放后添加另一个replot 命令?我似乎记得不久前的一个错误报告,其中 GPVAL_ 变量在鼠标操作后没有更新。您使用的是什么 gp 版本?
  • 我在 Windows 上使用Version 5.0 patchlevel 6 last modified 2017-03-18。我使用鼠标滚轮调整绘图窗口的缩放。
  • sourceforge.net/p/gnuplot/bugs/1327 来自 2014 年,所以不是这样。电流是 5.2pl3,顺便说一句。
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多