Mischen von Oberfläche und Streudiagramm in einem einzigen 3D-Diagramm

Ich untersuche die Verteilungsmuster von Walen um bestimmte Meeresbodenstrukturen. Ich versuche ein @ zu erstellinteraktives 3D-Diagramm gleichzeitig anzeigen:

Bathymetrie als Oberfläche (x = Länge,y = Breite,z = Tiefe) undgeographische Position der Walgruppen (x = Länge,y = Breite,z = feste Tiefe -30 Meter zum Beispiel).

Koordinaten werden in ein UTM-Koordinatensystem projiziert.

Ich arbeite normalerweise mit R und demggplot2 paket zur herstellung von figuren. Hier dieplotly Paket schien eine gute Option.

Ich habe mit einem Bathymetrie-Raster begonnenbathy_ras und ein data.frame von Punktenpoints.

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

Ich kann keine Möglichkeit finden, meine beiden Datensätze auf demselben Diagramm / derselben Achse zu kombinieren. Ich habe zwei Methoden ausprobiert, aber keine hat mir die gewünschte Ausgabe geliefert.

1)Erstellen des Plots in Rstudio mithilfe des Plot-Pakets.

#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)Erstellung des Grundstücks vollständig von der Grundstückswebsite. Zuerst habe ich das Raster "bathy_ras" in eine Matrix umgewandelt, die alle Koordinatenpunkte (x, y) und die Tiefe z @ enthäl

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

Ich habe ein Plotly-Konto erstellt. Ich habe zwei Datenrahmen als TXT-Dateien in mein Plot-Konto importiert:bathy_df undpoints.

Dadurch werden zwei Raster im Plotkonto erstellt. Ich kann leicht zwei separate 3D-Diagramme für diese beiden data.frames schreiben: Eines ist ein Oberflächendiagramm (siehe unten), das andere ist ein Streudiagramm. Ich habe versucht, das Streudiagramm im Anschluss an dieses Tutorial als neue Kurve in das Oberflächendiagramm aufzunehmen http: //help.plot.ly/update-a-graphs-data), aber die Option "Einfügen in" scheint nur dann nicht verfügbar zu sein, wenn das Streudiagramm in 3D vorliegt.Surface-Plot, der über die grafische Weboberfläche erstellt wurde

Ist es möglich ein @ zu kombinierscatter3D und ein Flächendiagramm inplotly?

nb: Ich habe versucht,raster::persp in Kombination mitpoints() aber ich bin nicht sehr zufrieden mit der allgemeinen Ästhetik des Oberflächenplots, weshalb ich es vorziehen würde, dies mit @ zu tplotly und / oderggplot2.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage