我學習圍繞具體的海底結構鯨的分佈格局。我試圖創建一個交互式3D圖表示在同一時間:混合面和散點圖在一個單一的3D繪圖
- 水深作爲表面(
x
=經度,y
=緯度,z
=深度),和 - 地理位置鯨組(
x
=經度,y
=緯度,z
=固定深度-30米例如)。
座標投影在UTM座標系。
我通常與R和ggplot2
包用於產生數字工作。在這裏,plotly
包似乎是一個不錯的選擇。
我從水深柵格bathy_ras
開始,點數據框爲points
。
> bathy_ras
class : RasterLayer
dimensions : 784, 821, 643664 (nrow, ncol, ncell)
resolution : 102, 111 (x, y)
extent : 755070, 838812, -2612148, -2525124 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=58S +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : bathymetry
values : -1949.42, -34.27859 (min, max)
> str(points)
'data.frame': 214 obs. of 3 variables:
$ x: num 774264 777293 775476 773430 773284 ...
$ y: num -2534165 -2533556 -2531012 -2532904 -2533695 ...
$ z: num -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 ...
我不能找到一種方法,我的兩個數據集結合在同一張圖/同一軸線上。我嘗試了兩種方法,但沒有給我想要的輸出。
1)創建使用plotly包在Rstudio劇情。
#convert raster into a matrix of bathymetry values
bathy_matrix <- as.matrix(bathy_ras)
> str(bathy_matrix)
num [1:784, 1:821] -362 -365 -367 -369 -371 ...
#create interactive plot
p <- plot_ly(z=bathy_matrix, type="surface",showscale=FALSE)
#this works fine, it get a 3D interactive surface plot of the seabed
#but if I try to add the "points" layer it doesn't show on the plot
p <- plot_ly(z=bathy_matrix, type="surface",showscale=FALSE) %>%
add_trace(x = gp_seamounts_df$utmx, y = gp_seamounts_df$utmy, z = gp_seamounts_df$z, type = "scatter3d", mode = "markers", showscale=FALSE, opacity=0.98)
2)完全從plotly網站創建的情節。 首先我轉換光柵「bathy_ras」到含有座標的所有點的矩陣(X,Y)和深度z
#convert raster into a dataframe
bathy_df <- as.data.frame(coordinates(bathy_ras))
bathy_df$z <- values(bathy_ras)
> str(bathy_df)
'data.frame': 643664 obs. of 3 variables:
$ x: num 755121 755223 755325 755427 755529 ...
$ y: num -2525179 -2525179 -2525179 -2525179 -2525179 ...
$ z: num -362 -361 -360 -359 -358 ...
我創建了一個plotly帳戶。我在我的密謀帳戶中導入了兩個數據框作爲.txt文件:bathy_df
和points
。
這會在plotly帳戶兩個網格。我可以輕鬆地爲這兩個數據框架編寫兩個單獨的3D圖:一個是曲面圖(如下所示),另一個是散點圖。我嘗試將散點圖包含在曲面圖中作爲本教程後面的新軌跡(http://help.plot.ly/update-a-graphs-data/),但如果散點圖是3D的,則「插入」選項似乎不可用。 surface plot produced from the plotly web interface
是否有可能一個scatter3D
和plotly
表面情節結合起來?
注:我在combinaison試圖raster::persp
與points()
但我不會因表面的情節,這就是爲什麼我寧願用plotly
和/或ggplot2
做到這一點的一般審美非常滿意。
謝謝alistaire,這確實很有用。我的點的座標不在我矩陣的範圍內,這就是爲什麼他們沒有出現在劇情上。我必須將這些座標重新調整到我的矩陣('Xrange = [1:ncol)'的大小(最初UTM lat/long,'Xrange = [755100:838800]','Yrange = [ - 2612000,-2525000]') (bathy_matrix)]','Yrange = [1:nrow(bathy_matrix)]'),然後使用plot_ly然後它就起作用了。 –