R中的3D曲面图与plot3D或plotly

时间:2015-10-12 15:26:11

标签: r plot 3d surface

我想在R中生成3D表面,其中y是通量,x是年龄,z是降水。我的年龄范围在0到152之间,范围为0到2600.

我还有两个功能,其中通量是年龄或降水的函数: Flux= 0.387217066*(Age^0.328086337)*(exp(-0.004177033*Age)Flux= 1.117997*(1-exp(-exp(-5.426564)*(Preci-(-220.745499))

我想要达到的目标有点像链接http://www.oakdaleengr.com/plot3d.gif

中的数字

我尝试使用R中的包plot3D而没有成功(见下文)

    Age<- as.matrix(seq(0:152)) 
Preci<-as.matrix(seq(from=10, to=2600, by=17))
Flux= as.matrix(0.387217066*(Age^0.328086337)*(exp(-0.004177033*Age)) - 1.117997*(1-exp(-exp(-5.426564)*(Preci-(-220.745499)))))
surf3D(Age, Preci, Flux, colvar = Flux, colkey = FALSE, facets = FALSE)

我收到此错误消息

Error in if (is.na(var)) ispresent <- FALSE else if (length(var) == 1) if (is.logical(var)) if (!var) ispresent <- FALSE : 
  argument is of length zero

1 个答案:

答案 0 :(得分:2)

这是一个开始,使用emdbook::curve3d()作为lattice::wireframe的包装器(请参阅sys3d的{​​{1}}参数)。对我来说,为什么将你的通量函数作为年龄与沉淀的函数相结合,通过从另一个中减去一个来实现它是不合理的,但这就像你在上面所做的那样...

?curve3d

enter image description here

## for readability, put numeric values in a separate vector params <- c(a0=0.387217066,a1=0.328086337,a2=0.004177033, p0=1.117997,p1=5.426564,p2=-220.745499) library("emdbook") curve3d(with(as.list(params), a0*(Age^a1)*exp(-a2*Age)- p0*(1-exp(-exp(-p1)*(Preci-p2)))), varnames=c("Age","Preci"), xlim=c(0,200),ylim=c(10,2600), sys3d="wireframe", col="gray", zlab="Flux") 还会返回一个包含组件curve3d$x$y的列表,您可以将其用作其他3D图表框架的输入。