欠けているのは、gnuplot に輪郭を配置する場所を伝えることです。これは、 -0.3 から開始し、 o.1 ごとに 0.5 まで輪郭をトレースするset cntrparam levels incr -0.3,0.1,0.5
ことを意味するコマンドを介して行われます。
私の知る限り、輪郭をすべて黒くしたい場合は、輪郭線を一時ファイルに保存する必要があります(こちらcontour.txt
)。
だからあなたのスクリプトは
reset
set contour
unset surface
set cntrparam levels incr -0.3,0.1,0.5
set view map
set xrange [0:30]
set yrange [0:30]
set dgrid3d 100,100,4
set table "contour.txt"
splot 'test.txt'
unset table
unset contour
set surface
set table "dgrid.txt"
splot 'test.txt'
unset table
reset
set pm3d map
unset key
set palette defined (0 '#352a87', 1 '#0363e1',2 '#1485d4', 3 '#06a7c6', 4 '#38b99e', 5 '#92bf73', 6 '#d9ba56', 7 '#fcce2e', 8 '#f9fb0e')
set autoscale fix
set grid
splot 'dgrid.txt' w pm3d, 'contour.txt' w l lc rgb "black"
これにより、次のようになります。
ノート:
dgrid.txt
補間ファイル ( ) は、データファイルが既にメッシュ順になっているため、各行の後に (つまり、30 データポイントごとに) 空白行を残してデータファイルを少しフォーマットすると、取り除くことができます。
awk
これは、スクリプトでも実行できます。でも、調べるのが面倒…。
残りは同じままで、期待どおりに機能します。
これがどのように見えるかです:
その場合、スクリプトは単純に次のようになります。
set pm3d map impl
set contour
set style increment user
do for [i=1:18] { set style line i lc rgb "black"}
set cntrparam levels incr -0.3,0.1,0.5
set palette defined (0 '#352a87', 1 '#0363e1',2 '#1485d4', 3 '#06a7c6', 4 '#38b99e', 5 '#92bf73', 6 '#d9ba56', 7 '#fcce2e', 8 '#f9fb0e')
set autoscale fix
splot 'test.txt' w pm3d notitle
データはグリッドによって補間されないため、中間ファイルは必要なく、輪郭が改善されます。