gpt4 book ai didi

r - 将 yz- 和 xz-grid 添加到 scatterplot3d

转载 作者:行者123 更新时间:2023-12-04 10:49:23 28 4
gpt4 key购买 nike

在使用函数scatterplot3d()来自 scatterplot3d 包,grid=TRUE仅绘制 XY 平面的网格。看一下函数源代码只有 X 和 Y 分量。我也想为 YZ- 和 XZ- 平面绘制网格,如下图所示:

Goal

我已经在图像中搜索了带有这些网格的 R scatterplot3d 图像的示例,但无济于事。我想过s3d$plane3d但是生成的飞机看起来很乱。

我没有在 R 中编辑代码或编写函数的经验。我想我可以添加参数 xy.grid、yz.grid 和 xz.grid,然后修改网格的原始定义,如下所示:

if (xy.grid) {
i <- x.min:x.max
segments(i, z.min, i + (yx.f * y.max), yz.f * y.max +
z.min, col = col.grid, lty = lty.grid)
i <- 0:y.max
segments(x.min + (i * yx.f), i * yz.f + z.min, x.max +
(i * yx.f), i * yz.f + z.min, col = col.grid, lty = lty.grid)
}


if (xz.grid) {
i <- x.min:x.max
segments(i, y.min, i + (zx.f * z.max), zy.f * z.max +
y.min, col = col.grid, lty = lty.grid)
i <- 0:z.max
segments(x.min + (i * zx.f), i * zy.f + y.min, x.max +
(i * zx.f), i * zy.f + y.min, col = col.grid, lty = lty.grid)
}
if (yz.grid) {
i <- y.min:y.max
segments(i, x.min, i + (yz.f * z.max), zx.f * z.max +
x.min, col = col.grid, lty = lty.grid)
i <- 0:z.max
segments(y.min + (i * yz.f), i * zx.f + x.min, y.max +
(i * yz.f), i * zx.f + x.min, col = col.grid, lty = lty.grid)
}

我还尝试以一致的方式将这段代码添加到 x 和 z 以定义这些 y 项。
   y.range <- range(dat$y[is.finite(dat$y)], ylim)
y.prty <- pretty(y.range, n = lab[1], min.n = max(1, min(0.5 *
lab[1], p.lab[1])))
y.scal <- round(diff(y.prty[1:2]), digits = 12)
dat$y <- dat$y/y.scal
y.range <- range(y.prty)/y.scal
y.max <- ceiling(y.range[2])
y.min <- floor(y.range[1])
if (!is.null(ylim)) {
y.max <- max(y.max, ceiling(ylim[2]/y.scal))
y.min <- min(y.min, floor(ylim[1]/y.scal))
}
y.range <- range(y.min, y.max)

但是,在运行这个新代码时,我遇到了诸如 Error in segments(i, y.min, i + (zx.f * z.max), zy.f * z.max + y.min, :
object 'zx.f' not found
之类的错误。 .我不确定这个术语是如何以及在哪里定义的函数代码。我会很感激一些帮助引导我走向正确的方向谢谢!

我还在此处附加了 scatterplot3d 函数的原始代码:
scatterplot3d function source code

最佳答案

我创建了一个新函数,将网格添加到 xy 和/或 yz 函数。参数 grid now ,可以采用 grid=c('xy','yz') 之类的列表

z <- seq(-10, 10, 0.01)
x <- cos(z)
y <- sin(z)
sactter.grid(x, y, z, highlight.3d=TRUE,
col.axis="blue",
grid=c('xy','xz','yz'), ## add grid to all facets
col.grid="lightblue")

enter image description here

您可以在 gist 中找到新功能的源代码.

这里修改了代码:
if ("xy" %in% grid || grid) {
i <- x.min:x.max
segments(i, z.min, i + (yx.f * y.max), yz.f * y.max +
z.min, col = col.grid, lty = lty.grid)
i <- 0:y.max
segments(x.min + (i * yx.f), i * yz.f + z.min, x.max +
(i * yx.f), i * yz.f + z.min, col = col.grid, lty = lty.grid)
}
if ("xz" %in% grid) {
i <- x.min:x.max
segments(i + (yx.f * y.max), yz.f * y.max + z.min,
i + (yx.f * y.max), yz.f * y.max + z.max,
col = col.grid, lty = lty.grid)
temp <- yx.f * y.max
temp1 <- yz.f * y.max
i <- z.min:z.max
segments(x.min + temp,temp1 + i,
x.max + temp,temp1 + i , col = col.grid, lty = lty.grid)

}

if ("yz" %in% grid) {
i <- 0:y.max
segments(x.min + (i * yx.f), i * yz.f + z.min,
x.min + (i * yx.f) ,i * yz.f + z.max,
col = col.grid, lty = lty.grid)
temp <- yx.f * y.max
temp1 <- yz.f * y.max
i <- z.min:z.max
segments(x.min + temp,temp1 + i,
x.min, i , col = col.grid, lty = lty.grid)



}

关于r - 将 yz- 和 xz-grid 添加到 scatterplot3d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com