gnuplot - 正确裁剪 3D 图 (splot)

gnuplot - Properly clipping a 3D plot (splot)

免责声明:我是 Gnuplot 的新手,所以我可能遗漏了一些明显的东西...

对于我必须做的演示,我正在尝试使用 Gnuplot 创建交互式版本的 this 图。

到目前为止,我想出了以下代码:

set hidden3d
set isosamples 40
set border 4095
set xrange [-1 : 5]
set yrange [-3 : 3]
set zrange [-10 : 10]
set xtics 2
set ytics 2
set ztics 2
f(x,y) = x**2 + y**2 * (1 - x)**3
splot f(x,y)
pause -1

然而,在图的边界处(具体来说,在相对于 z 轴的边界处)图被截断了,我觉得这很丑陋;见下文。我想要的基本上是绘制所有线条,就好像我的绘图范围是(例如)-50 : 50,但最后只有 "intersection" 框 [-1:5] x [-3:3] x [-10:10] ] 实际上应该显示。现在似乎正在发生的事情是,任何 "plot segment" 在由 xrange-zrange 确定的框外至少有一个点根本不会被绘制。

(How) can I change this?

未来的回答,有点,所以这可能不算...

gnuplot 到 5.2 的版本不能完全满足您的要求。但是,只要您使用 pm3d 表面而不是 hidden3d 表面,开发版 5.3 就会默认执行此操作。这是当前开发代码呈现的情节:

set border 4095
unset colorbox
set view 56, 15, .75, 1.75
set samples 40, 40
set isosamples 40, 40
set xyplane 0
set grid x y z vertical
set pm3d depthorder border linewidth 0.100
set pm3d clip z 
set pm3d lighting primary 0.8 specular 0.3 spec2 0.3

set xrange [-1 : 5]
set yrange [-3 : 3]
set zrange [-10 : 10]
set xtics 1 offset 0,-0.5
set ytics 1 offset 0,-0.5
set ztics 5

f(x,y) = x**2 + y**2 * (1 - x)**3
splot f(x,y) with pm3d fillcolor "cyan"

关键是命令set pm3d clip z。这将是未来版本中的默认设置,但在 5.2 版中不受支持。您可以从 gnuplot.sf.net 上的当前 git 源存储库构建,或等待预计在 Spring 2020 年发布的 5.4 版。

也许您可以使用以下代码行来强制使用 zrange。

set ticslevel 0