如何使用R绘制三维矩阵的三维曲面

如何使用R绘制三维矩阵的三维曲面,r,graphics,3d,geometry-surface,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, c

我有浮点数字的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)

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

persp
下面是R图形库中的一个示例

require(misc3d)

a我认为
mba
包中的
mba.surf
将是平滑的好选择,正如上面larrydag所建议的那样,
persp
将有助于对其进行图像处理。下面的代码来自函数(为3列数据帧交换激光雷达):

数据(激光雷达)

int输出部分数据将大大增加您获得帮助的机会。您只需将
dput(head(x))
的输出粘贴到上面的问题中即可。感谢>dput(head(x))结构(列表(V1=c(0.01,0.013971025,0.019832054,0.021035526,0.023956488,0.027962379),V2=c(0.01,0.011738323,0.011925891,0.011990806,0.013416452,0.014304923),V3=c(8.21e-19,3.47e-17,1.77e-15,1.39e-14,5.46e-14),1.39e-14,1.39e-14,5.46e-14),行名,行名,行名,行名,行名,数据框(=“V3.6L=”),“数据类”)把dput转储放在问题中!这里的想法是改进问题和答案。
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")
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)