r如何用lat,long和z得到3d表面

时间:2017-07-30 22:06:50

标签: r 3d plotly

我有大约10个地点的纬度,经度和数据值。 这是我可以轻松为我的问题构建的数据框的示例

x <- c("-108.6125","-108.5114","-108.805","-108.4014","-108.5615","-108.8349","-108.225","-108.3139","-108.5568","-108.4968")
y <- c("39.02205","39.22255","39.598","38.89478","39.06429","39.27625","39.03","39.1306","39.14823","38.89795")
z <- c("60.7735","56.45783","49.65","60.15","50","53.95417","50.825","56","55.843","38.73333")
df <- data.frame(x = as.numeric(x),y = as.numeric(y),z = as.numeric(z))

我想根据数据框中的x,y和z值创建一个三维表面。 x和y是lat和long。 z是lat,long对的值。

我可以使用plot_ly(df, x = ~x, y = ~y, z = ~z) %>% add_markers(color = ~z)制作三维散点图,但在此代码中添加add_surface并不起作用。

涉及火山df(plot_ly() %>% add_surface(x = ~x, y = ~y, z = ~volcano)的情节三维表面示例使用均匀间隔的x和y值,z是二维数组。如果我理解正确,我需要每个位置的x和y对。

我是否可以通过某种操作来创建add_surface代码所需的z矩阵?

1 个答案:

答案 0 :(得分:3)

有时候写一个问题有助于找到答案。所需的操作是某种空间插值(克里金)程序。此stackoverflow Q and A解释了基础知识并给出了具体示例。使用上述问题中描述的数据集,以下行提供了解决方案。该链接也有其他方法。

library(akima)
library(plotly)
s = interp(x = df$x, y = df$y, z = df$z)
p <- plot_ly(x = s$x, y = s$y, z = s$z) %>% add_surface()