【问题标题】:Adding a plane to a scatterplot3d将平面添加到 scatterplot3d
【发布时间】:2012-11-13 01:59:23
【问题描述】:

我有一个直线方程

y=sqrt(c+x^2)

我想在 3d 散点图中添加一个平面,这样我的平面垂直于 x y 平面,上面给出的线是两个平面的交线。

我该怎么做?我不太明白 plane3d 是如何工作的。我读过http://svitsrv25.epfl.ch/R-doc/library/scatterplot3d/html/scatterplot3d.html

但还是不明白。

【问题讨论】:

标签: r


【解决方案1】:

这可能是您正在寻找的:

library(scatterplot3d)
# y=sqrt(a+x^2) with x in (-0.5,0.5), z in (0,1) and a=0
a <- 0
x <- rep(seq(-0.5, 0.5, length = 200), each = 200)
y <- sqrt(a + x^2)
z <- rep(seq(0, 1, length = 200), 200)
scatterplot3d(x, y, z, highlight.3d = TRUE, pch = 20)

编辑:这将有助于了解您是如何添加这些其他点的,但让我们以 ?scatterplot3d 中的第二个示例为例

  temp <- seq(-pi, 0, length = 50)
  x2 <- c(rep(1, 50) %*% t(cos(temp)))
  y2 <- c(cos(temp) %*% t(sin(temp)))
  z2 <- c(sin(temp) %*% t(sin(temp)))

现在将xx2 结合起来,并对我们得到的其他人做同样的事情:

scatterplot3d(c(x,x2), c(y,y2), c(z,z2), highlight.3d = TRUE, pch = 20)

【讨论】:

  • 我如何将那个东西添加到已经存在的散点图中?
  • @user1760348,现在可以回答问题了吗?
【解决方案2】:

除了前面的答案,一旦你构建了一个 3-D 散点图,你可以通过创建一个模型并使用嵌套在你的 scatterplot3d() 容器中的函数来解析它来添加一个平面。它应该看起来像这样:

plot3d <- scatterplot3d(x, y, z, ... )
model  <- lm(y ~ sqrt(c + x^2) + z)
plot3d$plane3d(model)

在这样的容器中拥有一个函数是一种非常奇怪的语法,但它可以工作,给你这样的东西(虚线平面在立方体中心附近可见):

如果您想手动创建一个或多个平面,我会使用我重新发布的 Uwe 的方法here

spd <- scatterplot3d(1:10, 1:10, 1:10)

# xy
spd$plane3d(0.3549896,0,0,lty="dotted")

# yz
x0 <- 5
xyz1 <- spd$xyz.convert(rep(x0, 6), rep(0, 6), seq(0, 10, by=2))
xyz2 <- spd$xyz.convert(rep(x0, 6), rep(10, 6), seq(0, 10, by=2))
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted")

xyz1 <- spd$xyz.convert(rep(x0, 6), seq(0, 10, by=2), rep(0, 6))
xyz2 <- spd$xyz.convert(rep(x0, 6), seq(0, 10, by=2), rep(10, 6))
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted")

# zx
y0 <- 6
xyz1 <- spd$xyz.convert(rep(0, 6), rep(y0, 6), seq(0, 10, by=2))
xyz2 <- spd$xyz.convert(rep(10, 6), rep(y0, 6), seq(0, 10, by=2))
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted")

xyz1 <- spd$xyz.convert(seq(0, 10, by=2), rep(y0, 6), rep(0, 6))
xyz2 <- spd$xyz.convert(seq(0, 10, by=2), rep(y0, 6), rep(10, 6))
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted")

这通过手动指定生成飞机:

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 1970-01-01
    • 2017-06-19
    • 2018-04-30
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多