如何用R绘制3D矩阵的3D表面

时间:2013-03-07 16:14:44

标签: r graphics 3d geometry-surface

我有浮点数的3D矩阵,我想用R生成这个矩阵的平滑3D表面。欢迎任何建议。感谢

现在我正在使用scatterplot3d ......但是这个函数没有产生平滑的表面

x<-read.table("/Users/me/Desktop/data.txt")
scatterplot3d(x$V1, x$V2, x$V3, highlight.3d = TRUE, angle = 30, col.axis = "blue", col.grid = "lightblue", cex.axis = 1.3, cex.lab = 1.1, pch = 20)

3 个答案:

答案 0 :(得分:2)

如果您能够创建一个二维矩阵(x,y),其值为z轴值,您可以使用以下

persp

以下是R Graph Gallery的示例。 persp example

答案 1 :(得分:2)

require(misc3d)

a <- 2/5

wsqr <-  1 - a^2
w <- sqrt(wsqr)
denom <- function(a,w,u,v) a*((w*cosh(a*u))^2 + (a*sin(w*v))^2)

fx <- function(u,v) -u + (2*wsqr*cosh(a*u)*sinh(a*u)/denom(a,w,u,v))
fy <- function(u,v) 2*w*cosh(a*u)*(-(w*cos(v)*cos(w*v)) - (sin(v)*sin(w*v)))/denom(a,w,u,v)
fz = function(u,v) 2*w*cosh(a*u)*(-(w*sin(v)*cos(w*v)) + (cos(v)*sin(w*v)))/denom(a,w,u,v)


parametric3d(fx = fx, fy = fy, fz = fz, 
             umin = -17, 
             umax = 17, 
             vmin = -77, 
             vmax = 77, 
             n = 100,
             color = c("grey17","grey21","red4","darkred","red4","grey21","grey17"),
             engine = "rgl")

enter image description here

答案 2 :(得分:2)

我认为来自mba.surf包的MBA对于平滑来说是一个不错的选择,正如上面的拉里达所暗示的那样,persp会很好地对其进行成像。下面的代码来自help page for the mba.surf函数(交换3列数据帧的LIDAR):

data(LIDAR)
mba.int <- mba.surf(LIDAR, 300, 300, extend=TRUE)$xyz.est
# Two ways of imaging....
image(mba.int, xaxs="r", yaxs="r")
persp(mba.int, theta = 135, phi = 30, col = "green3", scale = FALSE,
  ltheta = -120, shade = 0.75, expand = 10, border = NA, box = FALSE)

enter image description here