2011-09-27 94 views
4

我有在數據幀中的以下數據:3D圖中的R - 補丁

**x** in (0,1) 
**y** in [0,1] 
**z** in [0,1] 

例如:

X,Y,Z 
0.1, 0.2, 0.56 
0.1, 0.3, 0.57 
... 

我想他們繪製在這個類型的圖表: A 3d plot

我試過R,但我所能得到的只是一個not-so-fancy 3d scatterplot。 我也讀了關於lattice 3d wireframe,但我無法理解它。

我該怎麼做才能在R中得到像線框一樣的Matlab? 涉及哪些數據轉換?

這是從文檔中的示例代碼:

x <- seq(-pi, pi, len = 20) 
y <- seq(-pi, pi, len = 20) 
g <- expand.grid(x = x, y = y) 
g$z <- sin(sqrt(g$x^2 + g$y^2)) 
wireframe(z ~ x * y, g, drape = TRUE, 
aspect = c(3,1), colorkey = TRUE) 

我並不覺得特別清楚。

編輯persp3d函數工作正常,我能夠生成一個顏色的3d圖。如何設置相對於z值的色階?

感謝您的任何提示, Mulone

+0

確實需要一點練習才能將(x,y,z)數據轉換爲線框或其他3-d網格繪圖工具的z值矩陣。學習轉換是值得的,因爲一旦你知道如何,你永遠不會忘記:-)。你可能會喜歡scatterplot3d軟件包,它允許wiregrid繪圖。 –

+0

這是未經測試的,所以它只是作爲評論而不是答案。我會推薦'with(mydata,persp(x = sort(unique(X)),y = sort(unique(Y)),z = matrix(z,ncol = length(unique(x)))))' - - 我不太確定我是否按照正確的順序組織了矩陣(可能是'byrow = TRUE'等。) –

+2

請參閱'example(wireframe)'和'example(persp)'並檢查它是否符合您的需求。 – Marek

回答

11

使用outer創建z值,然後使用persp繪製:

z <- outer(x,y, function(x,y) sin(sqrt(x^2+y^2))) 
persp(x,y,z) 

persp

有着色並設置查看選項角度,請參見?persp。查看Matlab風格着色的第四個示例。

對於交互式情節,考慮在rgl包使用persp3d

require(rgl) 
persp3d(x,y,z,col="blue") 

編輯

要添加顏色,有一個從所述方法中persp稍有差異,由於彩色涉及到頂點而不是面的中心,但它更容易。

jet.colors <- colorRampPalette(c("blue", "green")) 
pal <- jet.colors(100) 
col.ind <- cut(z,100) # colour indices of each point 
persp3d(x,y,z,col=pal[col.ind]) 

persp3d

幫助文件建議添加參數smooth=FALSE,但是這是個人喜好。

+0

你可以包括結果的圖片嗎? –

+0

@RomanLuštrik現在加入 – James

+1

問題w /這個答案是假設z = f(x,y)。 OP說他有一組有序的三元組(x,y,z),在這種情況下,他需要生成一個擬合函數。當然,這不會繪製確切的原始數據。 –