2017-02-09 86 views
1

rgl包括非常有用的功能​​,它可以返回覆盖像在3D的点的95%百分比的椭球。然后可以在rgl::plot3d中使用此对象来绘制它。我的问题是,是否有可能将​​的输出转换为可以通过js绘制软件包来绘图的东西,如情节剧情?密谋绘制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作为矩阵(尺寸等于xy)。您还需要将z值分为两个单独的表面层,一个用于椭球体的上半部分,另一个用于底部。我现在没有时间去做所有这些,但是如果你遇到困难,我可以稍后再解决这个问题 – dww

+0

再次感谢你!我会试一试。有时候我觉得我的二维大脑不是为所有这些三维数据处理而建立的。大声笑 – Hao