Сюжет ellipse3d в R сюжетно?

Пакет rgl включает в себя очень полезную функцию ellipse3d, которая может возвращать эллипсоид, покрывающий около 95% процентов точек в 3D. Затем этот объект можно использовать в rgl::plot3d для его построения. Мой вопрос в том, можно ли преобразовать вывод ellipse3d во что-то, что можно построить с помощью пакетов js для построения графиков, таких как plotly?

library(rgl)
dt <- cbind(x = rnorm(100), y = rnorm(100), z = rnorm(100))
ellipse <- ellipse3d(cov(dt))
plot3d(dt)
plot3d(ellipse, add = T, color = "red", alpha = 0.5)

Тогда что я могу сделать, чтобы построить эллипсоид через сюжет?


person Hao    schedule 09.02.2017    source источник


Ответы (1)


Вы можете извлечь координаты эллипса из файла ellipse$vb. Затем постройте их. Что-то вроде:

p <- plot_ly() %>% 
  add_trace(type = 'scatter3d', size = 1, 
     x = ellipse$vb[1,], y = ellipse$vb[2,], z = ellipse$vb[3,], 
     opacity=0.01) %>% 
  add_trace(data=dt, type = 'scatter3d', x=~x, y=~y, z=~z)

введите здесь описание изображения

person dww    schedule 09.02.2017
comment
Потрясающие!! Спасибо! - person Hao; 09.02.2017
comment
Обратите внимание, что для простоты я изобразил эллипс в виде облака с помощью маркеров. Если вместо этого вы хотите использовать add_surface, вам придется сначала преобразовать эллипс в другой формат, с вектором местоположений x, вектором местоположений y, z в качестве матрицы (размеры равны x на y). Вам также потребуется разделить значения z на два отдельных поверхностных слоя: один для верхней половины эллипсоида, а другой для нижней. У меня сейчас нет времени заниматься всем этим, но если вы застрянете, я могу решить это позже. - person dww; 09.02.2017
comment
Еще раз спасибо! Я дам ему попробовать. Иногда мне кажется, что мой двухмерный мозг не приспособлен для обработки всех этих трехмерных данных. смешной - person Hao; 09.02.2017