我想用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
答案 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值的高斯滤波器取得了一些成功,但这实际上取决于您的数据以及您希望热图看起来“平滑”的程度)。