2017-07-30 49 views
1

我有約10個位置的緯度,經度和數據值。 這裏的一個數據幀的例子,我可以很容易地構建用於我的問題r plotly如何獲得緯度,長度和緯度的3d表面

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是lat和long。 z是lat,long對的值。

我可以做一個3d散點圖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)的繪圖3d表面示例使用均勻間隔的x和y值,z是2維陣列。如果我理解正確,我會爲每個位置需要x和y對。

是否有某種操作可以創建add_surface代碼所需的z矩陣?

回答

2

有時寫一個問題有助於找到答案。所需的操作是某種空間插值(克里金)程序。這個計算流程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()