2015-10-12 140 views
2

我想在R中產生一個三維曲面,其中y是流量,x是Age,z是降水量。我有0和152和範圍的降水0和2600R用plot3D繪製三維曲面圖或繪圖

的範圍內年齡我也有兩個功能,其中通量是年齡的函數或降水量: 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

我曾嘗試與包plot3D做R中沒有成功的鏈接圖(見下文)

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

'ggplot2'不會做3D圖,但可以使用'rgl'或'lattice :: wireframe'。 'emdbook :: curve3d()'可能是一個有用的包裝。 –

回答

2

這裏是一個開始,使用emdbook::curve3d()作爲lattice::wireframe的包裝(見sys3d參數?curve3d)。這不是明顯,我爲什麼會是有意義的你通量的功能組合成的年齡VS雨函數減去從另一個,而是因爲這是你在上面做了什麼......

## 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") 

enter image description here

curve3d還會返回一個列表,其中包含組件$x,$y,$z,您可以將其用作其他3D圖形框架的輸入。

+0

@ Ben Bolker。我同意,把我的通量函數作爲年齡與降水量的函數,通過從另一箇中減去另一個的函數來合併是沒有意義的。我更關注互動。你知道該怎麼做嗎? – SimonB

+0

這確實是一個科學/工程問題,而不是一個統計問題。根據情況,增加或乘以*可能有意義,或者您可能需要更多信息來確定正確的組合。 –