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

もちろん、グリッドを (上記の 2D ではなく) 1D 配列として表現できる場合は、(適切なループを使用して) 次の操作を実行できます。

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

dgrid3dまたは、 gnuplot で 使用することもできます。dgrid3d非グリッド データをグリッド データに補間します。デフォルトでは、ご指摘のとおりかなり粗い 10x10 グリッドに補間されます。これは、それぞれ x 軸と y 軸上の点の数であるset dgrid3d NX,NYwhereNXとare で増やすことができます。NY

最後に、データファイルをいじりたくない場合は、 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 に答える