問題は、データが「グリッド データ」形式ではないことです。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,NY
whereNX
と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"