0

我正在尝试将 z=0 平面添加到 3D 图中。我使用的代码是

library(plot3D)
zero = matrix(0, 20, 20)
persp3D(x=seq(1,20), y=seq(1,20), z = Delta_B, theta = 20, xlab = "D", ylab = "IR", zlab = "B increment")
persp3D(x=seq(1,20), y=seq(1,20), z = zero, col = "black", add = T)

但是 z=0 平面没有出现。在此处输入图像描述

如果我让飞机抖动

zero = jitter(matrix(0, 20, 20))

然后我可以正确地看到它。

在此处输入图像描述

事实上,试图单独绘制平面会产生空图。

persp3D(x=seq(1,20), y=seq(1,20), z = zero, col = "black")

在此处输入图像描述

编辑

部分解决方案是使用

zero = jitter(matrix(0, 20, 20)) / 10000

这导致平面与预期的平面无法区分。

在此处输入图像描述

4

1 回答 1

1

每当persp3D呈现一个常数矩阵时,就会出现故障。通常这是因为软件试图计算 Z 范围的比例并除以零。我只希望在自己绘制一个恒定平面时看到这一点,而不是在添加一个平面时。

比如base::persp会报错:

> persp(zero)
Error in persp.default(zero) : invalid 'z' limits

如果您想要一个完全可重现的示例,请创建一个Delta_B

> Delta_B = matrix(apply(expand.grid(1:20,1:20),1,function(r){sum(r)-20}),20,20)

然后:

> persp3D(x=seq(1,20), y=seq(1,20), z = Delta_B, theta = 20, xlab = "D", ylab = "IR", zlab = "B increment")
> zero = matrix(0, 20, 20)
> persp3D(x=seq(1,20), y=seq(1,20), z = zero, col = "black", add = TRUE)

不显示zero飞机。但是任何使zero矩阵非常数的东西都会修复它:

> zero[1,1]=0.000001
> persp3D(x=seq(1,20), y=seq(1,20), z = zero, col = "black", add = TRUE)

这应该足以向维护者提交错误报告。的代码persp3D是一段冗长的代码,我现在不深入研究。

于 2019-10-06T18:20:14.987 回答