首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用plot3D或巧妙地绘制R中的三维曲面

用plot3D或巧妙地绘制R中的三维曲面
EN

Stack Overflow用户
提问于 2015-10-12 15:26:11
回答 1查看 1.3K关注 0票数 3

我想在R中生成一个三维曲面,其中y是通量,x是年龄,z是降水。我的年龄在0到152之间,降水在0到2600之间。

我还有两个函数,其中通量是年龄或降水的函数:

代码语言:javascript
复制
Flux= 0.387217066*(Age^0.328086337)*(exp(-0.004177033*Age)

代码语言:javascript
复制
Flux= 1.117997*(1-exp(-exp(-5.426564)*(Preci-(-220.745499))

我想实现的是一些类似于的东西

我试着用R中的包plot3D来实现它,但没有成功(见下文)

代码语言:javascript
复制
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)

我收到了一条错误消息

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 22:45:07

首先,使用emdbook::curve3d()作为lattice::wireframe的包装器(参见?curve3dsys3d参数)。我不太清楚为什么把你的流量函数与年龄和精度的函数结合起来,从另一个中减去一个,但这就是你上面所做的……

代码语言:javascript
复制
## 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$z的列表,这些组件可以作为其他3D图形框架的输入。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33084776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档