x <-rnorm(500,50,2)
y <-rnorm(500,5,1)
z <-rnorm(500,6,1)
s3d <- scatterplot3d(x[z<6], y[z<6], z[z<6], zlim=range(z), color="darkgrey", col.axis="blue",col.grid="lightblue", main="scatterplot3d - 1", pch=20)
s3d$plane3d(6,0,0)
s3d$points3d(x[z>=6], y[z>=6], z[z>=6], pch=20)上面的代码告诉我如何在三维散点图中添加一个平面'z=6‘。
第一个问题是:我想知道如何添加一个平面,如'x=3‘或'y=2’。
R帮助文件解释说
plane3d(Intercept, x.coef = NULL, y.coef = NULL, lty = "dashed", lty.box = NULL, ...). Instead of Intercept a vector containing 3 elements can be specified.第二个问题是:我还想知道“带有三个元素的向量”而不是Intercept起什么作用,以及x.coef和y.coef参数的作用是什么。
发布于 2015-10-17 01:41:59
问题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系数似乎是用来将这两个变量映射到平面上的。
要手动制作特定的飞机,以下是乌维本人的建议:
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空间中的网格相匹配的规则间隔内采样点,然后映射它们之间的分段,生成网格:

https://stackoverflow.com/questions/28633784
复制相似问题