3d网格适应gnuplot中的非矩形数据

时间:2012-05-21 14:47:36

标签: grid plot gnuplot envelope

我想在3d图中绘制点并创建一个可以处理非矩形数据的网格。更具体地说,我的数据是

data.dat文件

-1 0 0
-1 1 0
0 -1 0
0 0 0
0 1 0
1 -1 0
1 0 0

和我的gnuplot文件

plot.plt

set dgrid3d 3,3
splot 'data.dat' w l
pause -1

不幸的是dgrid3d似乎使我的数据呈矩形,并且绘制了矩形网格(实际上是方形网格)。有没有办法绘制数据的限制包络?理想情况下,我想绘制我的一组点的orthogonal convex hull

1 个答案:

答案 0 :(得分:1)

你有几个选择做这样的事情 - 不幸的是,他们都需要你做一些工作。

首先,重要的是要注意 gnuplot可以处理非矩形网格以进行曲面绘制(即使此示例只需要一个矩形曲面)。对于曲面绘图,数据文件看起来像(注意空白记录):

x11 y11 z11
x21 y21 z21
x31 y31 z31
...

x12 y12 z12
x22 y22 z22
x23 y23 z23
...

然后形成四边形。在这种情况下,第一四边形将由点(x11,y11),(x21,y21),(x12,y12),(x22,y22)形成。第二个四边形将由(x21,y21),(x31,y31),(x22,y22),(x23,y23)等形成。因此,根据您的一组点,您可以轻松创建一个“矩形网格”,它将保存您的所有数据点。它不会均匀分布,但这并不是问题。现在我们需要弄清楚如何删除点,以便gnuplot不会绘制它们。这是“诡计”。您可以在数据文件(set datafile missing "string")中将特定字符串标记为“缺少数据”。在这种情况下,gnuplot不会绘制该点,但为了生成曲面,它仍然会跟踪缺失数据的坐标。

因此,在一天结束时,您的数据文件将类似于:

x11 y11 ?
x21 y21 ?
x31 y31 z31
...

x12 y12 ?
x22 y22 z22
x23 y23 z23
...

和绘制它的脚本将是:

set datafile missing '?'
set surf
set view map #Not sure about this...depends on the view you want
splot "mydata.dat" u 1:2:3 w lines

如果你想让gnuplot计算“正交凸包”,我想你在那里运气不好。

简单易行

另请注意,如果您想在2d空间中使用纯色对象(就像您发布的维基百科链接上的图片一样),则此问题会变得非常容易。如果你可以创建一个只包含你想要绘制的对象顶点的数据文件(按顺序使(x1,y1)连接到(x2,y2)连接到(x3,y3)...),那么你可以绘制该数据文件为:

set fillstyle #However you want the object to appear
plot "datafile.dat" u 1:2 with filledcurves closed