我正在用gnuplot“splot”函数绘制一个3d表面。数据以(x,y,z)格式写入文本文件中的3列。当我从文件中绘制数据时,splot连接数据的端点。表面本身是正确的,但是在表面的底部还有一组不需要的平行线(形成xy平面)。因此,对于每个x,它绘制一个对称衰减为零的函数,但是+ \ infty和 - \ infty也连接在一起!这使得图表下方的x轴成为不需要的x轴。
我试图将边界设置为零,使用数据格式等等。没有运气!
答案 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中使用dgrid3d
。 dgrid3d
将非网格数据插入到网格数据中。默认情况下,它会插入到10x10网格,正如您所指出的那样非常粗糙。您可以将其增加set dgrid3d NX,NY
,其中NX
和NY
分别是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"