1

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

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

4

1 回答 1

2

您的问题是您的数据不是“网格数据”格式。Gnuplot 看到数据并将其绘制为线而不是将其绘制为表面。不幸的是,我不知道 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

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

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

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

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

#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" 
于 2012-08-14T12:41:47.610 回答