我正在尝试在Gnuplot中绘制矩阵,就像我在Matplotlib中使用imshow一样。这意味着我只想绘制实际的矩阵值,而不是值之间的插值。我已经能够通过尝试
来做到这一点splot "file.dat" u 1:2:3 ps 5 pt 5 palette
这样我们告诉程序在文件中使用第1,2和3列,使用大小为5的正方形并将间隙非常窄的点空间化。但是,我的数据集中的点间距不均匀,因此我得到了不连续性。
任何人都可以在gnuplot中绘制矩阵值,而不管X轴和y轴的间距是否均匀?
答案 0 :(得分:1)
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决定平均角落通常“足够接近”,但随后你可以选择更改它。
答案 1 :(得分:0)
请参阅输入数据here的说明。您可能需要相应地更改数据文件的格式。