Смешивание поверхности и диаграммы рассеяния в одном трехмерном графике

Я изучаю закономерности распределения китов вокруг определенных структур морского дна. Я пытаюсь создатьинтерактивный 3D сюжет показывая в то же время:

батиметрия как поверхность (x = долгота,y = широта,z = глубина) игеографическое положение китовых групп (x = долгота,y = широта,z = фиксированная глубина -30 метров, например).

Координаты проецируются в системе координат UTM.

Я обычно работаю с R иggplot2 пакет для изготовления фигур. Здесьplotly Пакет показался мне хорошим вариантом.

Я начал с растром батиметрииbathy_ras и data.frame точек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)Создание сюжета в Rstudio с использованием пакета 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)Создание сюжета полностью с сюжетного сайта, Сначала я преобразовал растр «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 ...

Я создал сюжетный аккаунт. Я импортировал два кадра данных в виде файлов .txt в свой аккаунт:bathy_df а такжеpoints.

Это создает две сетки в сюжете. Я легко могу написать два отдельных трехмерных графика для этих двух данных. Один из них: график поверхности (показан ниже), другой график рассеяния. Я попытался включить диаграмму рассеяния в поверхностный график как новый след после этого урока (http://help.plot.ly/update-a-graphs-data/) но опция «вставить в» кажется просто недоступной, если диаграмма рассеяния находится в 3D.Поверхностный участок, созданный из сюжетного веб интерфейса

Можно ли объединитьscatter3D и земельный участок вplotly?

нб: я пыталсяraster::persp в сочетании сpoints() но меня не очень устраивает общая эстетика поверхностного сюжета, поэтому я бы предпочел сделать это сplotly и / илиggplot2.

Ответы на вопрос(1)

Ваш ответ на вопрос