gnuplot:如何在3D绘图中使xy、xz和yz平面不透明/实心?
我最近学习了GNUplot,正在使用“矩阵”数据格式绘制一些3D数据集。在对我在web上找到的一些命令文件进行mashup后,它运行得非常好,但是我还没有找到关于如何执行以下操作的任何信息: 我希望将数据打印为三维曲面,其中xy平面中的实心/不透明曲面位于z最小值,xz和yz平面位于x和y数据限制。例如,我的绘图当前如下所示: 我希望它有不透明的平面,如下图所示: (很抱歉没有发布真实的图片,但我对这个论坛太陌生了,还没有这个特权) 我猜我需要手动将平面添加为具有自己矩阵数据结构的附加3D曲面,但我不确定如何执行此操作 我目前正在使用以下命令绘制数据:gnuplot:如何在3D绘图中使xy、xz和yz平面不透明/实心?,3d,gnuplot,3d,Gnuplot,我最近学习了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
命令绘制平面的等高线,但是在取消设置边界、tics和标签之后(否则,由于不同的抗锯齿,绘图可能会锁定锯齿)splot
- 仅绘制平面的轮廓。在打印它们之前,我需要
,因为等高线类型是相对于曲面线型的。因此,我需要使用取消设置曲面
,但不希望绘制曲面本身lt 9
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