[英]3D Surface Interpolation
我有一個三列數據框,其中包含緯度,經度和地下測量值。 我試圖弄清楚如何在我擁有的點(不規則空間)之間插入數據點,然后創建整個區域的平滑表面圖。 我試圖在'rgl'包中使用'surface3d'函數,但是我的結果看起來像是一個巨大的峰值。 我已經能夠使用'plot3d'繪制數據,但是我需要更進一步,並使用插值來填充空白。 有什么想法或建議嗎? 我也願意使用其他軟件包,當時rgl似乎是最合適的。
編輯:這是我的數據(含水層深度的測量值)的摘錄:
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
只是添加關於插值的小而重要的注釋。
使用非常好的包“ akima”,您可以輕松地插值數據:
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")
使用此程序包,您可以輕松更改插值的步長等。您需要至少10(更好)的點,才能使用此程序包進行合理的樣條插值。 線性版本的效果很好,無論點數如何。
PS感謝用戶2554330-不了解deldir,在某些情況下確實有用。
您可以使用deldir包來獲取點的Delaunay三角剖分,然后將其轉換為triangles3d
進行繪圖所需的數據形式。 我不知道這對於一個非常大的數據集將有多有效,但它似乎可以在100分上起作用:
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")
編輯添加:
R- rgl
上的rgl
版本現在具有rgl
此功能的功能。 現在,您可以使用生成與上面相似的圖
library(deldir)
library(rgl)
plot3d(deldir(x, y, z = z))
還有一個函數可以從deldir()
輸出中構造mesh3d
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.