2017-01-17 19 views
1

나는 rgl.persp3d에서 3 차원 줄거리를 만들었지 만 그 경향을보기 위해 어떻게 부드럽게해야할지 모르겠다. 아니면 다음 해결책은 rgl.persp3d에서 와이어 프레임을 구현하는 것입니다 (대화 형이기 때문에이 플롯이 필요합니다). 도와주세요. R에 3 차원 플롯을 부드럽게하기

#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

그래서 와이어

wireframe

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) 
이 부드럽게되지도 대화 ... 그리고 rgl.persp3d는 상호 작용하지만 매끄럽게되지도. 그리고 나는 부드럽고 상호 작용할 수 없다.

답변

2

rgl 당신이주는 것을 그립니다. 스무딩을 수행하려면 첫 번째 예제에서와 같이 mgcv을 사용해야하지만 마지막에 적합한 값의 행렬을 얻지 못하므로 deldir을 사용하여 결과를 서페이스로 변환해야합니다. 예를 들어,

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) 

library(rgl) 
library(deldir) 

zfit <- fitted(mod) 
col <- cm.colors(20)[1 + 
     round(19*(zfit - min(zfit))/diff(range(zfit)))] 

persp3d(deldir(x, y, z = zfit), col = col) 
aspect3d(1, 2, 1) 

이 예

enter image description here

를 들어, 좋은 매끄러운 표면을 제공합니다