コンテンツを含むデータファイルがいくつかあります
a1 b1 c1 d1
a1 b2 c2 d2
...
[blank line]
a2 b1 c1 d1
a2 b2 c2 d2
...
これをgnuplotでプロットします
splot 'file' u 1:2:3:4 w pm3d.
今、私はバイナリファイルを使いたいと思っています。フォーマットされていないストリーム アクセスを使用して Fortran でファイルを作成しました (直接または順次アクセスは直接機能しませんでした)。gnuplot を使用して
splot 'file' binary format='%float%float%float%float' u 1:2:3
通常の 3D プロットが得られます。ただし、バイナリ ファイルに空白行がないため、pm3d コマンドは機能しません。エラーメッセージが表示されます:
>splot 'file' binary format='%float%float%float%float' u 1:2:3:4 w pm3d
Warning: Single isoline (scan) is not enough for a pm3d plot.
Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
http://gnuplot.sourceforge.net/demo/image2.htmlのデモ スクリプトによると、レコード長を指定する必要があります (これはまだよくわかりません)。ただし、デモ ページのこのスクリプトと pm3d でのコマンドを使用すると、同じエラー メッセージが表示されます。
splot 'scatter2.bin' binary record=30:30:29:26 u 1:2:3 w pm3d
では、バイナリ ファイルからこの 4 次元データを正しくプロットするにはどうすればよいでしょうか。
編集:ありがとう、ミリソン。今では正常に動作します。記録のために:私のfortranコードスニペット:
open(unit=83,file=fname,action='write',status='replace',access='stream',form='unformatted')
a= 0.d0
b= 0.d0
do i=1,200
do j=1,100
write(83)real(a),real(b),c(i,j),d(i,j)
b = b + db
end do
a = a + da
b = 0.d0
end do
close(83)
gnuplot コマンド:
set pm3d map
set contour
set cntrparam levels 20
set cntrparam bspline
unset clabel
splot 'fname' binary record=(100,-1) format='%float' u 1:2:3:4 t 'd as pm3d-projection, c as contour'