我想用基于非均匀网格的gnuplot创建一个热图,这意味着我的x轴箱没有全部相同的宽度,我无法弄清楚如何做到这一点,因为当我绘制我的例如“with image”的数据我得到的大小均匀的盒子根本不符合我的坐标(因为“image”将数据视为矩阵我猜)。所以我想找到一种方法来获得非均匀的盒子,这些盒子也位于笛卡尔平面上的正确位置。
我的数据看起来像这样:
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
如果我在Gnuplot上运行此命令
set xrange [1:10]
p 'mydata.dat' with image
我得到的图片包含16个具有相同宽度和高度的盒子(显然我在Stackoverflow上没有足够的“声望”来发布图像,否则我会),但理想情况下我希望盒子有不同宽度,并在飞机上的正确位置。例如,第一个框的范围应为1到2,第二个框的范围应为2到5,第三个框的范围应为5到7,最后一个框的范围应为7到10(这就是我写set xrange [1:10]
的原因)。 / p>
有人可以帮我吗?非常感谢你!
答案 0 :(得分:3)
最简单(也许唯一可行)的方法是添加一些虚拟数据点并使用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
使用
绘制它set pm3d map corners2color c1
set autoscale fix
set ytics 1
splot 'mydata.dat' using 1:($2-0.5):3 notitle
4.6.3的结果是:
通常,虚拟数据点的z
- 值无关紧要,但在上面的脚本中,它应位于最小值和最大值之间,以使set autoscale fix
能够正常工作色标。
如果您不想手动更改数据文件,可以使用某些脚本执行此操作,但这是一个不同的问题。