2017-02-09 2 views
1

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

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) 

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

ответ

2

Вы можете извлечь координаты эллипса из 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) 

enter image description here

+0

удивительным !! Благодаря! – Hao

+1

Заметим, что для простоты я нарисовал эллипс как облако, используя маркеры. Если вы хотите использовать 'add_surface' вместо этого, вам придется сначала преобразовать эллипс в другой формат, с вектором местоположений x, вектором y-местоположений, z в качестве матрицы (размеры, равные x на y). Вам также необходимо разделить значения z на два отдельных поверхностных слоя: один для верхней половины эллипсоида, а другой для нижней. У меня нет времени, чтобы сделать все это, но если вы застряли, я смогу это сделать позже. – dww

+0

Еще раз спасибо! Я дам ему попробовать. Иногда мне кажется, что мой трехмерный мозг не построен для всех этих трехмерных данных. лол – Hao

Смежные вопросы