3

我想在 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))

我想要实现的是有点像这样

在此处输入图像描述

我试图用plot3DR 中的包来做,但没有成功(见下文)

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
4

1 回答 1

3

这是一个开始,emdbook::curve3d()用作lattice::wireframe(参见 的sys3d参数?curve3d)的包装器。对我来说,为什么通过从另一个中减去一个来将你的通量函数作为年龄与沉淀的函数结合起来是有意义的,但这就是你在上面所做的......

## 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您可以将其用作其他 3D 图形框架的输入。$y$z

于 2015-10-12T22:45:07.323 回答