【发布时间】:2018-10-28 23:39:44
【问题描述】:
与此处的问题类似,但这并没有完全满足我的需求,我无法弄清楚:Plot ellipse3d in R plotly?。我想在情节中重新创建 rgl 的 ellipse3d 和表面椭球。我知道有一个允许绘制椭圆的anwer,但作为单独的不透明标记,我需要将其作为一个稍微不透明的表面椭圆体,这样我仍然可以看到椭圆体中的数据点。
我试图弄清楚 dww 对“add_surface”的评论是如何工作的,但无法弄清楚....有人可以帮忙吗?
if (!require("rgl")) install.packages("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)
dww 的回答是:
if (!require("plotly")) install.packages("plotly")
if (!require("rgl")) install.packages("rgl")
dt <- cbind(x = rnorm(100), y = rnorm(100), z = rnorm(100))
ellipse <- ellipse3d(cov(dt))
p <- plot_ly(mode = 'markers') %>%
add_trace(type = 'scatter3d', size = 1,
x = ellipse$vb[1,], y = ellipse$vb[2,], z = ellipse$vb[3,],
opacity=0.01) %>%
add_trace(type = 'scatter3d', x = dt[,1], y = dt[,2], z = dt[,3])
p
# shows more obviously what dww's code does to create the visual ellipsoid
w <- plot_ly(mode = 'markers') %>%
add_trace(type = 'scatter3d',
x = ellipse$vb[1,], y = ellipse$vb[2,], z = ellipse$vb[3,],
opacity=0.5) %>%
add_trace(type = 'scatter3d', x = dt[,1], y = dt[,2], z = dt[,3])
w
他们对如何使用 add_surface 的评论是
请注意,为简单起见,我使用标记将椭圆绘制为云。如果要改用 add_surface,则必须首先将椭圆转换为不同的格式,其中包含 x 位置的向量、y 位置的向量、z 作为矩阵(维度等于 x 乘 y)。您还需要将 z 值拆分为两个单独的表面层,一个用于椭圆体的上半部分,一个用于底部。我现在没有时间做这一切,但如果你遇到困难,我可以稍后解决
【问题讨论】:
-
你的代码确实给了我任何东西...没有输出。
-
我已经编辑过了。