Я пытаюсь добавить сетку поверх 3D-поверхности, созданной с помощью persp3D
(пакет plot3D
), однако я не могу найти способ сделать это, не вызывая деформации сетки.
library(plot3D)
data("volcano")
volcano
— это трехмерная матрица, которую можно использовать для создания трехмерного графика, просто вызвав:
persp3D(z=volcano)
Что я собираюсь сделать, так это создать новую сетку, используя размеры 3D-матрицы, а затем добавить ее на 3D-график.
# new grid
x.seq <- seq(1, dim(volcano)[1], length = 20)
y.seq <- seq(1, dim(volcano)[2], length = 20)
# Visualize grid
plot(x=c(0,length(volcano[,1])), y=c(0,length(volcano[1,])), type='n')
abline(v=x.seq, h=y.seq)
Я приблизился к этому, заменив матрицу volcano
новыми созданными последовательностями, а затем нанес новую 3D-матрицу на исходную 3D-поверхность.
# New matrix using sequences created
mtx.sub <- volcano[time.seq, freq.seq]
# Plot new matrix on top of original surface
persp3D(z=volcano)
persp3D(z=amp.sub, border="black", facets=NA, add=T, colkey=list(plot=F))
Несмотря на то, что результат близок к тому, что я ожидал, более пристальный взгляд покажет, что сетка на самом деле не поверх существующей поверхности, это совершенно новая поверхность, которая не соответствует исходной (что совершенно очевидно, учитывая, что это другая матрица).
Я ищу способ добавить 2D-сетку, которая будет проходить по исходной поверхности, что-то похожее на abline
, но для 3D-графика.
Я просмотрел документацию по plot3D
и поискал в Интернете, но ни одно из решений не применимо к persp3D()
.
Любые мысли о том, как обойти это?