r 绘制如何通过纬度、经度和 z 获取 3d 表面

标签 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 值创建 3d 表面。 x 和 y 是纬度和经度。 z 是经纬度对的值。

我可以使用 plot_ly(df, x = ~x, y = ~y, z = ~z) %>% add_markers(color = ~z) 绘制 3d 散点图,但添加 add_surface这段代码不起作用。

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

我可以进行某种操作来创建 add_surface 代码所需的 z 矩阵吗?

最佳答案

有时写下问题有助于找到问题的答案。所需的操作是某种空间插值(克里金)程序。这个 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()

关于r 绘制如何通过纬度、经度和 z 获取 3d 表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45405167/

相关文章:

javascript - 如何隐藏 plotly 中的数据差距?

python - 如何绘制按另一列分组的数据?

mysql - 在 R 中分别导入和处理多个 MySQL 表

reshape R 中的日期列

r - 有没有办法根据行、列和变量类型猜测 data.frame 的大小?

c++ - 将动画应用于 openGL 中的对象

r - 仅绘制 ETS 模型的季节性成分 - R

inheritance - SceneKit Swift 3 继承不起作用

matlab - 在三维图中表示三个变量

python - 如何更改 Plotly 保存图像的步骤?