非均匀网格上的 Gnuplot 热图

use*_*851 2 gnuplot heatmap

我想使用基于非均匀网格的 gnuplot 创建热图,这意味着我的 x 轴箱的宽度不完全相同,而且我不知道如何做到这一点,因为当我用 for 绘制数据时例如“使用图像”我得到统一大小的框,它们根本不对应于我的坐标(因为“图像”将数据视为我猜的矩阵)。所以我想找到一种方法来获得非均匀框,这些框也位于笛卡尔平面上的正确位置。

我的数据看起来像这样:

1 1 0.2
1 2 0.8
1 3 0.1
1 4 0.2

2 1 0.7
2 2 0.2
2 3 0.3
2 4 0.1

5 1 0.2
5 2 0.4
5 3 0.1
5 4 0.9

7 1 0.3
7 2 0.2
7 3 0.9
7 4 0.6
Run Code Online (Sandbox Code Playgroud)

如果我在 Gnuplot 上运行这个命令

set xrange [1:10]
p 'mydata.dat' with image
Run Code Online (Sandbox Code Playgroud)

我得到一张包含 16 个具有相同宽度和高度的盒子的图像(显然我在 Stackoverflow 上没有足够的“声誉”来发布图像,否则我会的),但理想情况下我希望这些盒子具有不同的宽度并且是在飞机上正确的位置。例如,第一个框的范围应为 1 到 2,第二个框的范围应为 2 到 5,第三个框的范围应为 5 到 7,最后一个框的范围应为 7 到 10(这就是我写的原因set xrange [1:10])。

有人可以帮我吗?非常感谢!

Chr*_*oph 5

最简单(也许唯一可行)的方法是添加一些虚拟数据点并使用splot ... with pm3d. 这种绘图风格可以处理带有一般四边形的热图。

绘图image风格为每个数据点绘制一个方框(一个大像素),同时pm3d将每个数据点作为一个或多个四边形的角。每个四边形的颜色由角的值决定,并且可以通过 进行调整set pm3d corners2color

因此,在您的情况下,您需要将4x4矩阵扩展到5x5矩阵(扩展到右侧和顶部),但选择左下角来确定颜色set pm3d corners2color c1

更改后的数据文件为:

1 1 0.2
1 2 0.8
1 3 0.1
1 4 0.2
1 5 0.5

2 1 0.7
2 2 0.2
2 3 0.3
2 4 0.1
2 5 0.5

5 1 0.2
5 2 0.4
5 3 0.1
5 4 0.9
5 5 0.5

7 1 0.3
7 2 0.2
7 3 0.9
7 4 0.6
7 5 0.5

10 1 0.5
10 2 0.5
10 3 0.5
10 4 0.5
10 5 0.5
Run Code Online (Sandbox Code Playgroud)

绘制它使用

set pm3d map corners2color c1
set autoscale fix
set ytics 1
splot 'mydata.dat' using 1:($2-0.5):3 notitle
Run Code Online (Sandbox Code Playgroud)

4.6.3的结果是:

在此输入图像描述

一般来说,z虚拟数据点的 - 值并不重要,但在上面的脚本中,它应该位于最小值和最大值之间,以便set autoscale fix在色标上正常工作。

如果您不想手动更改数据文件,可以使用一些脚本来完成,但这是一个不同的问题。