问题 1:我会使用线性模型来添加平面,正如我在此处描述的以及包作者在小插图中使用的那样:
plot3d <- scatterplot3d(x, y, z, ... )
model <- lm(y ~ x + z)
plot3d$plane3d(model)
您可以手动指定 xyz 截距,但我不建议这样做,因为它会产生一些奇怪的行为。您还可以使用用于点的函数构造复杂的网格表面,但正如作者在小插图中所述:
请注意, scatterplot3d 旨在生成散点图,而不是绘制曲面,对于此目的来说并不是真正的用户友好,为此我们通常宁愿使用 R 的 persp 函数。
问题2:具有三个元素的向量是xyz截距的容器。您可以像上面那样手动指定它们s3d$plane3d(6,0,0)
。x 和 y 系数似乎用于将这两个变量映射到平面上。
要手动制作特定的飞机,这里是Uwe自己的建议:
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")
首先使用其内置的 xyz 坐标转换函数以与 xyz 空间中的网格匹配的规则间隔对点进行采样,然后在它们之间映射线段,生成网格: