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

Posted

技术标签:

【中文标题】gnuplot - 正确裁剪 3D 图(splot)【英文标题】:gnuplot - Properly clipping a 3D plot (splot) 【发布时间】:2019-11-27 14:52:48 【问题描述】:

免责声明:我对 Gnuplot 完全陌生,所以我可能遗漏了一些明显的东西......

对于我必须提供的演示文稿,我正在尝试使用 Gnuplot 创建this plot 的交互式版本。

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

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,但最后实际上应该只显示绘图与框[-1:5] x [-3:3] x [-10:10] 的“交集”。现在似乎正在发生的事情是,任何在由xrange-zrange 确定的框外至少有一个点的“情节段”根本不会被绘制出来。

(如何)我可以改变这个?

【问题讨论】:

【参考方案1】:

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

从 5.2 到 5.2 的 gnuplot 版本无法完全满足您的需求。但是,只要您使用 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 源存储库构建,或者等待 5.4 版预计在 2020 年春季发布。

【讨论】:

【参考方案2】:

也许你可以通过下面这行代码来强制zrange。

set ticslevel 0

【讨论】:

以上是关于gnuplot - 正确裁剪 3D 图(splot)的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Gnuplot 不裁剪科学记数法

使用 gnuplot 绘制宽度图

Octave-Gnuplot-AquaTerm 错误:设置终端 aqua 增强标题“图 1”...未知终端类型”

gnuplot:如何在每个像素上无边距绘制一个2D数组元素

JCrop 无法正确裁剪图像

如何在Gnuplot 5中制作GIF动画