R: построить плоскость в 3D - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь добавить плоскость z = 0 к трехмерному графику. Код, который я использую:

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 не появляется. enter image description here

Если я дрожу на плоскости с

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

Тогда я вижу это правильно.

enter image description here

На самом деле попытка построить только плоскость приводит к пустому графику.

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

enter image description here

РЕДАКТИРОВАТЬ

Частичным решением будет использование

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

, в результате чего плоскость будет неотличима от предполагаемой.

enter image description here

1 Ответ

0 голосов
/ 06 октября 2019

Что-то не получается, когда 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 - это длинный фрагмент кода, в который я не буду сейчас углубляться.

...