Gnuplot:如何从其顶点绘制 polygon/contour

Gnuplot: how to draw polygon/contour from its vertices

我的 data.txt 文件包含构成多边形线段的点的二维坐标。这些坐标随着时间的推移而演变。该文件的结构如下:

itr    nbr_pts   p1.x p1.y ...... pk.x pk.y
(itr+1) ..........
.....

其中 pk 是多边形的第 k 个 point/vertex,nb_pts 是顶点数。

我的问题是如何在某个迭代(行)从其顶点(p1、p2、...pk)绘制二维多边形?

另外注意,这里的数据不是只有一个file/polygon,而是N个:data1.txt .... dataN.txt

我尝试过类似的方法但没有成功(文件数量 =6)

N = 6 
set multiplot
plot for [i=0:N-1]  polygon_i = sprintf("%s/data%d.dat",filename, i)  polygon_i val= for [j=1:] u (j+1):(j+1+1)  w lines 

我知道有多少polygones/files(在这个cae中是6),但我不知道每个文件中的列数;顶点的数量可能因多边形而异。

有什么想法吗?

我的想法需要修改您的文件结构。对于每个迭代时间,都有一个块包含多边形顶点的 xy 坐标:

# file: data1.txt

# itr 0
0 0
1 1
1 2
0 0


# itr 1
1 3
2 1
0 1
1 2
1 3


# itr 2
3 1
2 1
0 0
3 1

请注意,每个块由两个空行分隔。对于迭代 0(块 0 或 itr 0),有一个具有三个顶点的多边形,itr 1 具有四个顶点,itr 2 具有三个顶点。得到闭合曲线需要指定终点,比如itr 1我把点1 3放了两次

对于这个文件,我们可以在迭代 iter 时将多边形绘制为

iter = 1   # select block 1, or itr 1
plot "data1.txt" index iter w lp ps 2 pt 7 

如果您有多个文件,请尝试

# option 1
nbr  = 6      # number of files
iter = 1      # select block 1, or itr 1

plot for [i=1:nbr] "data".i.".txt" index iter w lp ps 2 pt 7 title "".i

#option 2
files = system("ls data*.txt")   # get all datafiles in folder
iter = 1                         # select block 1, or itr 1

plot for [data in files] data index iter w lp ps 2 pt 7 title data