适用于gnuplot中非矩形数据的三维网格
题
我想在3d图中绘制点,并创建一个可以处理非矩形数据的网格。更具体地说,我的数据是
数据。dat
-1 0 0
-1 1 0
0 -1 0
0 0 0
0 1 0
1 -1 0
1 0 0
和我的gnuplot文件
情节。plt,plt
set dgrid3d 3,3
splot 'data.dat' w l
pause -1
不幸的是 dgrid3d
似乎使我的数据成为矩形,并绘制了一个矩形网格(实际上是一个正方形网格)。有没有办法绘制我的数据的受限信封?理想情况下,我想绘制 正交凸包 我的观点。
解决方案
你有几个选择做这样的事情-不幸的是,它们都需要你的一些工作。
首先,重要的是要注意 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