你有几个选择来做这样的事情——不幸的是,它们都需要你做一些工作。
首先,重要的是要注意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 计算“正交凸包”,我认为你在那里不走运。
简单的方法
另请注意,如果您想要二维空间中的纯色对象(如您发布的维基百科链接上的图片),则此问题变得容易得多。如果您可以仅使用要绘制的对象的顶点创建一个数据文件(以便 (x1,y1) 连接到 (x2,y2) 连接到 (x3,y3)...),那么您可以绘制该数据文件为:
set fillstyle #However you want the object to appear
plot "datafile.dat" u 1:2 with filledcurves closed