我试图像数据中的情节一样生成热图。数据以
的形式给出# 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)。数据说明:
现在使用
绘制此图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²),但差距仍然存在。 :/ - stonebird 2016年6月6日10:31
x
和y
值定义一个非常具体的范围来解决此问题。但这对我不起作用,因为很难找出这个实际上有效的值。
是否有可能从填充整个绘图区域的数据点创建热图,如图?
使用gnuplot 5.0 patchlevel 6
答案 0 :(得分:1)
这是网格的固有问题(+与pm3d相似)。来自help dgrid3d
:
为绘图和轮廓线创建一个网格,其尺寸派生自散布数据的边界框和由行/ col_size参数指定的大小。
Gnuplot首先删除x / yranges内的所有数据点,然后在那些数据点上创建一个边界框(可能稍微小一些),然后才创建网格化数据。
理想情况下,应该能够关闭这个边界框的创建,并让gnuplot只生成一个跨越整个x / yrange的网格。
解决这个问题的方法是使用set table
将网格化数据绘制到文件(或者,因为gp5,到内联$ datablock),然后关闭dgrid3d,并绘制此数据块。然后你仍然必须精确缩放到具有数据点的min / max x / y值(以摆脱空白),但你至少可以轻松地查看它们。
Oooor跳过数据块创建并自动剪切放大视图:
现在通过
切断空白区域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
以选择合适的插值算法/内核)