2016-04-04 34 views
2

Sütunlar olarak enlem, boylam ve yeraltı ölçümleri bulunan üç sütun veri çerçevem ​​var. Verdiğim noktaların (düzensiz alan olan) noktaları arasında nasıl enterpolasyon yapılacağını anlamaya çalışıyorum ve daha sonra tüm alanın düzgün bir yüzey grafiğini oluşturuyorum. 'Rgl' paketindeki 'surface3d' işlevini kullanmaya çalıştım ama sonuçta tek bir dev başak gibi görünüyor. Verileri 'plot3d' ile çizebildim ancak bir adım daha atmalı ve boşlukları enterpolasyon ile doldurmalıyım. Herhangi bir fikir veya öneri? Diğer paketleri kullanmaya da açık olduğum için, rgl sadece o zaman en uygun gibi görünüyordu.3D Yüzey İnterpolasyonu

DÜZENLEME: İşte benim verilerle bir alıntı (akifer derinliği ölçümleri) var:

lat_dd_NAD83 long_dd_NAD83 lev_va_ft 
1  37.01030  -101.5006 288.49 
2  37.03977  -101.6633 191.68 
3  37.05201  -100.4994 159.34 
4  37.06567  -101.3292 174.07 
5  37.06947  -101.4561 285.08 
6  37.10098  -102.0134 128.94 
+0

'Asbio' paketindeki' loess.surf' işlevini kullanabilirsiniz. Verilerinizi sağlayabilirseniz size daha iyi yardımcı olabiliriz – adaien

+0

kriging (gstat paketiyle) –

+0

'u denemek için açık bir teknik gibi görünebilir "3D yüzey" in çeşitli yorumları mümkündür. Ölçülen 'lev' değerleri arasında 'lat' ve' long' bazında interpolasyon yapmaya mı çalışıyorsunuz? (Ben 3 boyutlu gömülü 2d manifold diyebilirim. Ve eğer o zaman RHS üzerinde 2 değişkenli loess (istatistik paketinde de olsa) önerisi yerinde görünüyor ve zaten resimli bir cevap var gibi görünüyor: http: // stackoverflow.com/questions/15019725/r-3d-surface-plot –

cevap

0

Ardından, dilerseniz noktaları Delaunay üçgenleme almak gerekli verilerin formuna dönüştürmek için deldir paketini kullanabilirsiniz Çizim için triangles3d. Bu gerçekten büyük veri kümesi üzerinde olacağını ne kadar etkili bilmiyorum ama 100 puan üzerinde çalışmak gibi görünüyor: EDITED

library(deldir) 
library(rgl) 
# Create some fake data 
x <- rnorm(100) 
y <- rnorm(100) 
z <- x^2 + y^2 

# Triangulate it in x and y 
del <- deldir(x, y, z = z) 
triangs <- do.call(rbind, triang.list(del)) 

# Plot the resulting surface 
plot3d(x, y, z, type = "n") 
triangles3d(triangs[, c("x", "y", "z")], col = "gray") 

enter image description here

eklemek için:

rgl sürümü üzerinde R-forge şimdi bunu kolaylaştırmak için bir fonksiyona sahiptir. Artık deldir() çıkışından mesh3d nesneleri oluşturmak için bir işlev de vardır

library(deldir) 
library(rgl) 
plot3d(deldir(x, y, z = z)) 

kullanarak yukarıdakine benzer bir arsa üretebilir.

2

Sadece enterpolasyon hakkında küçük ama (belki) önemli notlar ekleyin. Kolayca En az gerekecektir vb interpolasyon adımlarla, miktarını değiştirebilirsiniz Bu paket ile

library(akima) 
library(rgl) 
# library(deldir) 

# Create some fake data 
x <- rnorm(100) 
y <- rnorm(100) 
z <- x^2 + y^2 

# # Triangulate it in x and y 
# del <- deldir(x, y, z = z) 
# triangs <- do.call(rbind, triang.list(del)) 
# 
# # Plot the resulting surface 
# plot3d(x, y, z, type = "n") 
# triangles3d(triangs[, c("x", "y", "z")], col = "gray") 

n_interpolation <- 200 

spline_interpolated <- interp(x, y, z, 
           xo=seq(min(x), max(x), length = n_interpolation), 
           yo=seq(min(y), max(y), length = n_interpolation), 
           linear = FALSE, extrap = TRUE) 

x.si <- spline_interpolated$x 
y.si <- spline_interpolated$y 
z.si <- spline_interpolated$z 

persp3d(x.si, y.si, z.si, col = "gray") 

Spline - interpolated picture (200 steps)

: kolayca veri interpole edebilir çok güzel paketi "Akima" kullanma

Bu paketle makul bir spline enterpolasyonu elde etmek için 10 (daha iyi) daha fazladır. Doğrusal versiyon, sayısız noktaya iyi çalışır.

P.S. 2554330 kullanıcısı için teşekkürler - deldir'i bilmiyordum, bazı durumlarda gerçekten yararlı bir şey.

İlgili konular