如何获取轮廓或曲面图形式数据文件(使用gnuplot)?

时间:2016-08-02 10:28:38

标签: gnuplot

我想用gnuplot绘制我的2d函数ch(x,y)。我的数据文件以这种方式构建:

x1 y1 ch(x1,y1)
x2 x2 ch(x2,y2)
x3 y3 ch(x3,y3)
x1 y1 ch(x1,y1)

x4 y4 ch(x4,y4)
...
...
...

...

我的函数值在每个三角形的3个顶点处构成我的(三角形,非结构化)网格(见图http://i65.tinypic.com/2mydkq9.jpg)。 我想得到的是两个独立的数字: 1.表面上有这样的东西,有一个颜色条作为图例: http://i68.tinypic.com/egvkzr.jpg 和 2.类似的东西,但对于轮廓线,用颜色条作为图例。

如何用gnuplot获取这两个数字? 我试过做第一个:

set palette rgbformulae 33,13,10
set xrange [0: 0.25]
set yrange [0: 0.20]
set view map
splot "mydatafile.txt" w l pal 

但是里面的三角形是白色的(没有填充颜色),只有三角形的边缘是彩色的。 轮廓线怎么样?

提前谢谢你,

Keccogrin

2 个答案:

答案 0 :(得分:1)

为了制作彩色地图,您需要预处理数据,以便将每个三角形与下一个三角形分开两个空行,并复制其中一个点,以便制作一个退化的四边形,中间有一条空行:

x1 y1 ch(x1,y1)
x2 x2 ch(x2,y2)

x3 y3 ch(x3,y3)
x3 y3 ch(x3,y3)


x1 y1 ch(x1,y1)
x2 x2 ch(x2,y2)

x4 y4 ch(x4,y4)
x4 y4 ch(x4,y4)

...

然后:

set view map
set pm3d interpolate 10,10 corners2color mean
splot "data.dat" notitle with pm3d

要处理您的数据,您可以使用此awk脚本:

{
 print $0
 if (NR % 3 == 2) print ""
 if (NR % 3 == 0) print $0 "\n\n"
}

在linux shell下,使用awk -f script.awk data.txt > data.dat运行它。如果您只绘制一次,您可以随时运行它#34;在情节的论证中(如plot "<awk -f script.awk data.txt"),但如果你需要多次绘图,那么这对于大文件是不可取的(因此只能在gnuplot脚本中使用,例如自动绘图)。

答案 1 :(得分:1)

您可以让gnuplot为您生成网格化数据:

set dgrid3d spline
set table $Gridded
splot "mydatafile.txt"
unset table
unset dgrid3d

然后你可以绘制(网格化)数据和这样的轮廓:

set view map
set contour base
set cntrlabel onecolor
set cntrlabel  format '%h' font ',8'
set cntrlabel start 25 interval 200
set cntrparam bspline
set cntrparam order 10
set cntrparam levels 10 
set pm3d at b explicit
splot $Gridded with pm3d, \
      $Gridded with labels nosurface

第一条splot线将为您提供热图和轮廓,第二条线将为您提供轮廓标签。 此外,您可能希望阅读有关dgrid3d的文档并使用这些选项。根据您的数据,样条曲线可能无法获得满意的结果(使用具有相对较大dx值的高斯滤波器取得了一些成功,但这实际上取决于您的数据以及您希望热图看起来“平滑”的程度)。