4

私は最近 GNUplot を手に入れ、「マトリックス」データ形式を使用していくつかの 3D データ セットをプロットしています。Web で見つけたいくつかのコマンド ファイルをマッシュアップした後、かなりうまく機能していますが、次のことを行う方法については何も見つかりませんでした。

z 最小の xy 平面と x および y データ制限の xz および yz 平面に固体/不透明な表面を持つ 3D 表面としてデータをプロットしたいと思います。たとえば、私のプロットは現在次のようになっています。

http://audio.claub.net/temp/waterfall__plot_normalized_to_on-axis.JPG

下の画像のような不透明な平面があることをお勧めします。

http://www.musicanddesign.com/images/NOTE_Polar_surface_SE_Datadata.gif

(実際の画像を投稿できなくて申し訳ありませんが、私はこのフォーラムに参加したばかりで、まだその特権を持っていません)。

平面を独自のマトリックス データ構造を持つ追加の 3D サーフェスとして手動で追加する必要があると思いますが、その方法がわかりません。

現在、次のコマンドを使用してデータをプロットしています。

reset
set xrange [100:20000]
#set yrange [-60:60]
#set zrange [-25:3]
set logscale x
set cntrparam levels increment GPVAL_DATA_Z_MAX-2,-2,-30
# GPVAL_DATA_Z_MAX above contains the max z value in the data set
set surface
set contour surface
set style data lines
set ticslevel 0
set xlabel 'frequency  [Hz]' #offset 0,2.25
set xtics add ("200" 200,"500" 500,"2000" 2000,"5000" 5000,"20000" 20000)
set mytics 4
set ylabel "angle\n[deg]" offset -12,0
set view 60,20
set clabel
set tics out
set key at 120000,-20 noautotitle title "SPL level"
set hidden3d offset 3
set isosamples 200,100
splot 'data.dat' nonuniform matrix using 2:1:3 lt 9

プロットで不透明なサーフェスを生成する方法を誰かが提案できますか?

これについて助けてくれてありがとう。

.

4

3 に答える 3

5

これらの平面を描画する方法は次のとおりです (最初にコードと結果、次に説明)。

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は最小値 ( ) に設定されます。サーフェスの他のすべてのポイントが使用され、スキップされる未定義のデータ ポイントが生成されます。-50z-401/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

与える:

ここに画像の説明を入力

最初の例と比較して、次の追加を行いました。

  • 明示的なマージンを追加し、マニュアルyrangezrange. 平面の等高線はモードの 2 番目のsplotコマンドで描画されmultiplotますが、境界線、目盛り、およびラベルの設定を解除した後に必要になるためです (そうしないと、アンチエイリアシングが異なるためにプロットがぎざぎざに固定される可能性があります)。

  • 平面の輪郭だけを描きます。unset surface等高線の種類は表面の線の種類に対して相対的に取得されるため、それらをプロットする前に必要です。だから私は使用する必要がありますlt 9が、サーフェス自体を描画したくありません。

于 2013-08-27T09:06:28.513 に答える
0

最後の行を変更してみてください

set pm3d
splot 'data.dat' nonuniform matrix using 2:1:3 lt 9 with pm3d at s

色を変更するには

set palette rgbformulae 33,13,10

斑点の前

于 2013-08-26T23:35:34.063 に答える