これらの平面を描画する方法は次のとおりです (最初にコードと結果、次に説明)。
reset
set terminal pngcairo size 1000,800
set output 'test.png'
set xrange [100:20000]
set logscale x
set cntrparam levels increment -2,-2,-30
set contour surface
set style data lines
set ticslevel 0
set xlabel 'frequency (in Hz)' #offset 0,2.25
set xtics add ("200" 200,"500" 500,"2000" 2000,"5000" 5000,"20000" 20000)
set mytics 4
set ylabel "angle (in deg)" rotate parallel
set view 60,20
set tics out
set key at screen 0.94, screen 0.5 noautotitle title "SPL level"
set hidden3d offset 3
splot 'data.dat' nonuniform matrix using 2:1:3 lt 9, \
'' nonuniform matrix using 2:(-60):($1 == -60 ? $3-0.02 : ($1 == -50 ? -40 : 1/0)) lt -3 nocontour,\
'' nonuniform matrix using (20000):1:(($2 > 18500 && $2 < 20000) ? -40 : ($2 == 20000 ? $3-0.02 : 1/0)) lt -3 nocontour
これは与える:
xz
-plane (コマンドの 2 行目)を作成するsplot
には、次のようにしました。
y
値が最初の値 ( -60
) と等しい場合、ファイルの-valuez
が使用されます (これ-0.02
は化粧品専用です。違いを確認するには、それを削除してください)。-value が 2 番目の値 ( ) とy
等しい場合、 -valueは最小値 ( ) に設定されます。サーフェスの他のすべてのポイントが使用され、スキップされる未定義のデータ ポイントが生成されます。-50
z
-40
1/0
はlt -3
、サーフェス ラインが描画されないことを意味します。
nocontour
この平面の輪郭を省略します
yz
それに応じて -plane が生成されますが、ここでx
-values をチェックする必要があります。これは、データ ファイルの制限と増分を知っていることを前提としています。そうでない場合、またはこれらが頻繁に変更される場合は、さらにトリックが必要です。
お気づきかもしれませんが、ファイルの他の部分も変更しました。
GPVAL_DATA_Z_MAX
プロット後にのみ使用できるため、インクリメントの設定には使用できません。(スクリプトを 2 回呼び出した場合のみreset
)。このコマンドを使用して、stats
最小データ値と最大データ値を抽出できます。
screen
座標を使用して を配置できますkey
。
はylabel
で軸に平行に配置できますrotate parallel
。
編集:平面に同じ色の等高線を追加する方法
コードは次のとおりです。
reset
set terminal pngcairo size 1000,800
set output 'test.png'
set xrange [100:20000]
# added following block:
set yrange [-60:60]
set zrange [-40:5]
set lmargin screen 0.2
set tmargin screen 0.8
set rmargin screen 0.8
set bmargin screen 0.2
set logscale x
set cntrparam levels increment -2,-2,-30
set contour surface
set style data lines
set ticslevel 0
set xlabel 'frequency (in Hz)' #offset 0,2.25
set xtics add ("200" 200,"500" 500,"2000" 2000,"5000" 5000,"20000" 20000)
set mytics 4
set ylabel "angle (in deg)" rotate parallel
set view 60,20
set tics out
unset key
set hidden3d nooffset
set multiplot
splot 'data.dat' nonuniform matrix using 2:1:3 lt 9,\
'' nonuniform matrix using 2:(-60):($1 == -60 ? $3-0.02 : ($1 == -50 ? -40 : 1/0)) lt -3 nocontour, \
'' nonuniform matrix using (20000):1:(($2 > 18500 && $2 < 20000) ? -40 : ($2 == 20000 ? $3-0.02 : 1/0)) lt -3 nocontour
unset tics
unset xlabel
unset ylabel
unset border
unset surface
unset hidden3d
splot 'data.dat' nonuniform matrix using 2:(-60):($1 == -60 ? $3-0.02 : ($1 == -50 ? -40 : 1/0)) lt 9,\
'' nonuniform matrix using (20000):1:(($2 > 18500 && $2 < 20000) ? -40 : ($2 == 20000 ? $3-0.02 : 1/0)) lt 9
unset multiplot
与える:
最初の例と比較して、次の追加を行いました。
明示的なマージンを追加し、マニュアルyrange
とzrange
. 平面の等高線はモードの 2 番目のsplot
コマンドで描画されmultiplot
ますが、境界線、目盛り、およびラベルの設定を解除した後に必要になるためです (そうしないと、アンチエイリアシングが異なるためにプロットがぎざぎざに固定される可能性があります)。
平面の輪郭だけを描きます。unset surface
等高線の種類は表面の線の種類に対して相対的に取得されるため、それらをプロットする前に必要です。だから私は使用する必要がありますlt 9
が、サーフェス自体を描画したくありません。