gnuplot连接数据的端点

时间:2012-08-13 04:24:57

标签: gnuplot

我正在用gnuplot“splot”函数绘制一个3d表面。数据以(x,y,z)格式写入文本文件中的3列。当我从文件中绘制数据时,splot连接数据的端点。表面本身是正确的,但是在表面的底部还有一组不需要的平行线(形成xy平面)。因此,对于每个x,它绘制一个对称衰减为零的函数,但是+ \ infty和 - \ infty也连接在一起!这使得图表下方的x轴成为不需要的x轴。

我试图将边界设置为零,使用数据格式等等。没有运气!

1 个答案:

答案 0 :(得分:2)

您的问题是您的数据不是'网格数据'格式。 Gnuplot查看数据并将其绘制为 lines ,而不是将其绘制为曲面。不幸的是,我不知道matlab,但这里有一些伪代码应该可以工作(尽管可能不是最有效的数据写入方式):

 do iy=1 to ny
    do ix=1 to nx
       write gridx(ix,iy), gridy(ix,iy), data(ix,iy)
    enddo
    write blank line
 enddo

当然,如果您的网格可以表示为1D数组(而不是上面的2D),您可以执行以下操作(使用适当的循环):

 write gridx(ix), gridy(iy), data(ix,iy)

或者,您可以在gnuplot中使用dgrid3ddgrid3d将非网格数据插入到网格数据中。默认情况下,它会插入到10x10网格,正如您所指出的那样非常粗糙。您可以将其增加set dgrid3d NX,NY,其中NXNY分别是x和y轴上的点数。

最后,如果您不想弄乱数据文件,可能需要考虑使用gnuplot FAQ中的以下awk脚本(第3.9节):

#addblanks.awk
/^[[:blank:]]*#/ {next} # ignore comments (lines starting with #)
NF < 3 {next} # ignore lines which don't have at least 3 columns
$1 != prev {printf "\n"; prev=$1} # print blank line
{print} # print the line

现在绘制你的表面:

set surface
splot "<awk -f addblanks.awk yourdatafile.dat"