2015-04-01 77 views
0

一個3D線性表面我有以下數據:劇情從2D函數中的R

x <- c(1000,2000,3000,4000,5000,6000,8000,12000) 

y_80 <- c(33276,33276,5913,2921,1052,411,219,146) 
y_60 <- c(14724,14724,3755,1958,852,372,211,140) 
y_40 <- c(9632,9632,2315, 1250,690,332,196,127) 
y_20 <- c(4672,4672,1051,562,387,213,129,81) 
y_5 <- c(825,825,210,118,88,44,27,17) 

從該數據創建5的樣條函數:

f_80 <- splinefun(x, y_80, method=c("monoH.FC")) 
f_60 <- splinefun(x, y_60, method=c("monoH.FC")) 
f_40 <- splinefun(x, y_40, method=c("monoH.FC")) 
f_20 <- splinefun(x, y_20, method=c("monoH.FC")) 
f_5 <- splinefun(x, y_5, method=c("monoH.FC")) 

在Z軸是後的數f_即函數f_80,Z值爲80,依此類推。

我需要做的是從這些函數繪製三維曲面,並在線條之間進行線性插值。 R中可能嗎? 我已經有過類似的問題,但我找不到答案。謝謝

回答

0

有各種R僞3D繪圖功能。基本圖形有persp,wireframe是在格子中,最酷的是,surface3d在rgl中。它們在處理軸參數方面有所不同,但它們通常都接受z值的矩陣參數。 `persp是簡單的:

z_80 <- f_80(x) 
z_60 <- f_60(x) 
z_40 <- f_40(x) 
z_20 <- f_20(x) 
z_5 <- f_5(x) 

png(); persp(matrix(c(z_80, z_60, z_40, z_20, z_5), nrow=length(x), 
       dimnames= list(X=x, Y=c(80,60,40,20,5)))) 
dev.off() 

enter image description here

你可能會發現,使用ticktype="detailed"是更多的信息:

png(); persp(matrix(c(z_80,z_60,z_40,z_20,z_5), nrow=length(x), 
         dimnames=list(X=x, Y=c(80,60,40,20,5))) , 
         ticktype="detailed", xlab="X axis", ylab="Y axis", 
         zlab=".    Z= f(y)", theta=45) ; dev.off() 

我通常需要觀察角度theta得到的東西我喜歡玩。讓z軸標籤遠離長z標籤標籤是一種破解。

enter image description here