Gnuplot 不需要均匀分布 X 轴和 Y 轴。(请参阅我的另一个答案:https ://stackoverflow.com/a/10690041/748858 )。我经常处理看起来像x[i] = f_x(i)
和的网格y[j] = f_y(j)
。这很容易绘制,数据文件看起来像:
#datafile.dat
x1 y1 z11
x1 y2 z12
...
x1 yN z1N
#<--- blank line (leave these comments out of your datafile ;)
x2 y1 z21
x2 y2 z22
...
x2 yN z2N
#<--- blank line
...
...
#<--- blank line
xN y1 zN1
...
xN yN zNN
(注意空行)
像这样的数据文件可以绘制为:
set view map
splot "datafile.dat" u 1:2:3 w pm3d
该选项set pm3d corners2color
可用于微调要为创建的矩形着色的角。
另请注意,您可以制作基本相同的情节:
set view map
plot "datafile.dat" u 1:2:3 w image
虽然我自己不使用这个,所以它可能会因不等间距的矩形网格而失败(你需要尝试一下)。
回复您的评论
是的,pm3d 确实会生成 (M-1)x(N-1) 四边形,正如您在评论中提到的那样——它需要 4 个角并(默认情况下)平均它们的值来分配颜色。你似乎不喜欢这个——尽管(在大多数情况下)我怀疑你能否分辨出相当大的 M 和 N(大于 20)的情节差异。因此,在我们继续之前,您可能想问自己是否真的有必要绘制EVERY POINT。
话虽如此,只要稍加工作,gnuplot 仍然可以做你想做的事。解决方案是指定一个特定的角用于将颜色分配给整个四边形。
#specify that the first corner should be used for coloring the quadrilateral
set pm3d corners2color c1 #could also be c2,c3, or c4.
然后简单地附加矩阵的最后一行和最后一列来绘制它两次(组成一个额外的网格点来容纳更大的数据集。你还没有到那里,你仍然需要将你的网格值移动半个单元格,以便你的四边形以所讨论的点为中心——移动单元格的方式取决于你选择的角(c1、c2、c3、c4)——你需要玩弄它来确定你想要哪个.
请注意,这里的问题不是 gnuplot。这是在给定 MxN 三元组的情况下,数据文件中没有足够的信息来构造 MxN 表面。在每一点,您需要知道它的位置 (x,y) 它的值 (z) 以及要在那里绘制的四边形的大小 - 这比您打包到文件中的信息更多。当然,您可以猜测内部点的大小(只需中途相遇),但无法猜测外部点。 但是为什么不直接使用下一个内部点的大小呢?. 这是一个很好的问题,它(通常)适用于矩形网格,但这只是一种特殊情况(尽管很常见)——对于许多其他网格来说,它(可能)会惨遭失败。关键是 gnuplot 决定平均角落通常“足够接近”,但随后您可以选择更改它。