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

标签 r scatter-plot

在使用函数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/

相关文章:

R - 在过滤不需要的数据后自动从多个 csv 文件创建散点图

python - 如何完全去除散点图周围的空白

matlab - 标记散点数据点

r - 循环以包含不同的文件夹和模式

r - "Social Network Analysis Labs in R"(斯坦福教程): Confusion over graph object/network class

r - R 中的消息框

python - matplotlib 中带有单像素标记的散点图

r - 如何有效地找到 R 中数据帧交集的索引?

linux - 提取值与特定模式匹配的列

javascript - 使用数据通过 d3 转换方法生成散点图