Mezcla de superficie y diagrama de dispersión en un solo gráfico 3D

Estoy estudiando los patrones de distribución de las ballenas alrededor de estructuras específicas de los fondos marinos. Estoy tratando de crear untrama interactiva en 3D mostrando al mismo tiempo:

batimetría como superficie (x = longitud,y = latitud,z = profundidad), yubicación geográfica de los grupos de ballenas (x = longitud,y = latitud,z = profundidad fija -30 metros por ejemplo).

Las coordenadas se proyectan en un sistema de coordenadas UTM.

Normalmente trabajo con R y elggplot2 paquete para producir figuras. Aquí elplotly El paquete parecía una buena opción.

Empecé con una trama de batimetríabathy_ras y un marco de datos de puntospoints.

> 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 ...

No puedo encontrar una manera de combinar mis dos conjuntos de datos en el mismo gráfico / mismo eje. Probé dos métodos pero ninguno me dio el resultado que quería.

1)Crear la trama en Rstudio usando el paquete plotly.

#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)Crear la trama completamente desde el sitio web de plotly. Primero convertí el ráster "bathy_ras" en una matriz que contiene todos los puntos de coordenadas (x, y) y profundidad 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 ...

Creé una cuenta de plotly. Importé dos marcos de datos como archivos .txt en mi cuenta de plotly:bathy_df ypoints.

Esto crea dos cuadrículas en la cuenta de ploteo. Puedo escribir fácilmente dos gráficos 3D separados para estos dos marcos de datos: uno es un gráfico de superficie (que se muestra a continuación), el otro es un diagrama de dispersión. Intenté incluir el diagrama de dispersión en el gráfico de superficie como un nuevo rastro después de este tutorial (http://help.plot.ly/update-a-graphs-data/) pero la opción "insertar en" parece no estar disponible si el diagrama de dispersión está en 3D.gráfico de superficie producido desde la interfaz web de plotly

¿Es posible combinar unscatter3D y una parcela de superficie enplotly?

nb: lo intentéraster::persp en combinaison conpoints() pero no estoy muy satisfecho con la estética general del diagrama de superficie, por eso preferiría hacer esto conplotly y / oggplot2.

Respuestas a la pregunta(1)

Su respuesta a la pregunta