gnuplot:如何在3D绘图中使xy、xz和yz平面不透明/实心?

gnuplot:如何在3D绘图中使xy、xz和yz平面不透明/实心?,3d,gnuplot,3d,Gnuplot,我最近学习了GNUplot,正在使用“矩阵”数据格式绘制一些3D数据集。在对我在web上找到的一些命令文件进行mashup后,它运行得非常好,但是我还没有找到关于如何执行以下操作的任何信息: 我希望将数据打印为三维曲面,其中xy平面中的实心/不透明曲面位于z最小值,xz和yz平面位于x和y数据限制。例如,我的绘图当前如下所示: 我希望它有不透明的平面,如下图所示: (很抱歉没有发布真实的图片,但我对这个论坛太陌生了,还没有这个特权) 我猜我需要手动将平面添加为具有自己矩阵数据结构的附加3D曲

我最近学习了GNUplot,正在使用“矩阵”数据格式绘制一些3D数据集。在对我在web上找到的一些命令文件进行mashup后,它运行得非常好,但是我还没有找到关于如何执行以下操作的任何信息:

我希望将数据打印为三维曲面,其中xy平面中的实心/不透明曲面位于z最小值,xz和yz平面位于x和y数据限制。例如,我的绘图当前如下所示:

我希望它有不透明的平面,如下图所示:

(很抱歉没有发布真实的图片,但我对这个论坛太陌生了,还没有这个特权)

我猜我需要手动将平面添加为具有自己矩阵数据结构的附加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
有人能建议我如何在绘图中生成不透明表面吗

谢谢你在这方面的帮助


.

尝试按更改最后一行

set pm3d
splot 'data.dat' nonuniform matrix using 2:1:3 lt 9 with pm3d at s
要更改颜色,请添加

set palette rgbformulae 33,13,10

在splot之前,以下是如何绘制这些平面(首先是代码和结果,然后是说明):

其中:

与第一个示例相比,我添加了以下内容:

  • 我添加了显式边距并设置了手动
    yrange
    zrange
    。这是必需的,因为在
    multiplot
    模式下使用第二个
    splot
    命令绘制平面的等高线,但是在取消设置边界、tics和标签之后(否则,由于不同的抗锯齿,绘图可能会锁定锯齿)

  • 仅绘制平面的轮廓。在打印它们之前,我需要
    取消设置曲面
    ,因为等高线类型是相对于曲面线型的。因此,我需要使用
    lt 9
    ,但不希望绘制曲面本身


多亏了克里斯托夫的精彩回答,我现在能够看到如何将“边”添加到绘图中,从而使结果看起来像一个3D对象

我稍微修改了一下命令。现在我可以添加边了,让等高线从z轴轨迹穿过“边”并与曲面的下降边相交也很好。这样做意味着我不需要该键,因为查看器可以从其z轴交点读取线的位置。下面给出了我正在使用的代码,以及指向结果图的链接。我希望所有网格曲面都是相同的颜色,并且轮廓线在曲面和边上必须具有相同的颜色。如果我使用多色计数线,每一张脸上的颜色总是不同的。所以我提出了一种方法,所有轮廓线只使用一种颜色,但这应该可以满足我的需要

代码如下:

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
reset
set terminal pngcairo size 1000,800 #I use a ported windows version, so I use the win term
set output 'test.png'
set xrange [100:20000]
set logscale x
set cntrparam levels increment 0,-5,-40
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)"
set view 60,20
set tics out
unset key
unset clabel
set hidden3d offset 3
splot 'test.dat' nonuniform matrix using 2:1:3 w l lt 1 lc rgb "#3D59AB", \
      '' nonuniform matrix using 2:(-60):($1 == -60 ? $3-0.02 : ($1 == -50 ? -40 : 1/0)) w l lt 1 lc rgb "#3D59AB" ,\
      '' nonuniform matrix using 2:(60):($1 == 60 ? $3-0.02 : ($1 == 50 ? -40 : 1/0)) w l lt 1 lc rgb "#3D59AB" ,\
      '' nonuniform matrix using (20000):1:(($2 > 18500 && $2 < 20000) ? -40 : ($2 == 20000 ? $3-0.02 : 1/0)) lt -999 
重置
设置终端pngcairo尺寸1000800#我使用移植的windows版本,因此我使用win术语
设置输出“test.png”
设置X范围[100:20000]
设置对数刻度x
设置cntrparam级别增量0,-5,-40
设置等高线曲面
设置样式数据行
设置ticslevel 0
设置xlabel“频率(单位:Hz)”偏移量0,2.25
设置xtics添加(“200”200,“500”500,“2000”2000,“5000”5000,“20000”20000)
设置mytics 4
设置“角度”(单位:度)
设置视图60,20
出发
取消设置键
安塞克拉贝尔酒店
将hidden3d偏移设置为3
使用2:1:3 w l lt 1 lc rgb“#3D59AB”的splot“test.dat”非均匀矩阵\
使用2:(-60):($1==-60?$3-0.02:($1==-50?-40:1/0))w l lt 1 lc rgb“#3D59AB”的非均匀矩阵\
“使用2:(60)的非均匀矩阵:($1==60?$3-0.02:($1==50?-40:1/0))w l lt 1 lc rgb”#3D59AB“\
使用(20000)的非均匀矩阵:1:($2>18500&$2<20000)?-40:($2==20000?$3-0.02:1/0))lt-999

最后,这里是结果图:


这不起作用-它会在数据集中创建一个透明的彩色表面。轴仍然“打开”。另一种解释是,我的数据集(使用我的命令)就像悬浮在空气中的床单,而不是固体。我想使“边”不透明,使生成的图看起来像一个实体。这是可能的,但我花了一些尝试才弄清楚如何做,请参阅我答案的编辑。嗨,克里斯托夫-谢谢你的后续行动!但我无法复制它。见上面回复你的帖子。克里斯托夫-我运行了你的命令文件,我确实得到了侧面的轮廓线与表面上相同的颜色。另一方面,当使用代码时,我的绘图是用垂直线生成的,就像我的绘图中只显示绿色等高线一样。我确实找到了解决办法。我的代码为每个面上的曲面线条指定线条颜色,我可以将线条颜色设置为#FFFFFF(白色),使线条与绘图的背景颜色相同。我不确定有什么不同。我正在使用版本4.7 patchlevel 0的MinGW Windows端口。我已经看到,这只适用于gnuplot 4.6 patchlevel 0、4.6.1和更高版本,但不起作用。似乎
未设置的曲面
被忽略。这可能是一个bug,我会在接下来的几天里提交bug报告。用于控制轮廓线样式/类型的其他变体不起作用:
设置样式增量用户
(从4.6开始已弃用,但仍应起作用)和
设置线型
。我找不到轮廓样式选择的魔力。稍后我将尝试签出源代码。现在它也适用于版本>4.6.0。在最后绘制等高线之前,我还需要
unset hidden3d
unset surface
wan不知道我没有得到你的结果:我在命令中添加了unset hidden3d,但没有什么不同-垂直线仍然显示出来。真正改变的是轮廓线的颜色-它们现在在面上与曲面上不同。还有,我刚刚注意到n
reset
set terminal pngcairo size 1000,800 #I use a ported windows version, so I use the win term
set output 'test.png'
set xrange [100:20000]
set logscale x
set cntrparam levels increment 0,-5,-40
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)"
set view 60,20
set tics out
unset key
unset clabel
set hidden3d offset 3
splot 'test.dat' nonuniform matrix using 2:1:3 w l lt 1 lc rgb "#3D59AB", \
      '' nonuniform matrix using 2:(-60):($1 == -60 ? $3-0.02 : ($1 == -50 ? -40 : 1/0)) w l lt 1 lc rgb "#3D59AB" ,\
      '' nonuniform matrix using 2:(60):($1 == 60 ? $3-0.02 : ($1 == 50 ? -40 : 1/0)) w l lt 1 lc rgb "#3D59AB" ,\
      '' nonuniform matrix using (20000):1:(($2 > 18500 && $2 < 20000) ? -40 : ($2 == 20000 ? $3-0.02 : 1/0)) lt -999