在R中平滑3d图

时间:2017-01-17 15:01:28

标签: r rgl wireframe

我在rgl.persp3d制作了3d情节,但我不知道如何平滑以观察趋势。或者也许下一个解决方案是在rgl.persp3d中实现线框(因为我需要这个图是交互式的)。请帮忙。

library(mgcv)


x<- rnorm(200)
y<- rnorm(200)
z<-rnorm(200)

tab<-data.frame(x,y,z)
tab

#surface wireframe:

mod <- gam(z ~ te(x, y), data = tab)

wyk <- matrix(fitted(mod), ncol = 20) #8 i 10 też ok

wireframe(wyk, drape=TRUE, colorkey=TRUE)

wireframe

#surface persp3d


library(rgl)
library(akima)


z_interpolation <- 200

tabint <- interp(x, y, z)

x.si <- tabint$x
y.si <- tabint$y
z.si <- tabint$z
nbcol <- 200
vertcol <- cut(t, nbcol)
color = rev(rainbow(nbcol, start = 0/6, end = 4/6))
persp3d(x.si, y.si, z.si, col = color[vertcol], smooth=T)

persp3d

因此线框既不平滑也不交互 ...和rgl.persp3d是交互式的,但没有平滑。而且我不能平滑和互动。

2 个答案:

答案 0 :(得分:2)

rgl只是画出你给的东西。您需要在第一个示例中使用mgcv进行平滑处理,但最后不会得到一个拟合值矩阵,因此您要使用{{1}将结果转换为曲面。例如,

deldir

这提供了一个很好的光滑表面,例如

enter image description here

答案 1 :(得分:0)

没有delaunay内容的简单方法:

library(mgcv)

x <- rnorm(200)
y <- rnorm(200)
z <- rnorm(200)

tab <- data.frame(x,y,z)

mod <- mgcv::gam(z ~ te(x, y), data = tab)
grid <- -5:5
zfit <- predict(mod, expand.grid(x = grid, y = grid))
persp3d(grid, grid, zfit)