【问题标题】:Add yz- and xz-grid to scatterplot3d将 yz- 和 xz-grid 添加到 scatterplot3d
【发布时间】:2013-12-08 00:46:21
【问题描述】:

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

我在图像中搜索了带有这些网格的 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

【问题讨论】:

    标签: r scatter-plot


    【解决方案1】:

    我创建了一个新函数,将网格添加到 xy 和/或 yz 函数。现在的参数网格,可以采用类似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")
    

    你可以在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)
    
    
    
        }
    

    【讨论】:

    • 非常感谢您的帮助!明天晚上我会研究解决方案。
    • 我刚刚意识到,将您选为最佳答案并不会自动奖励赏金,抱歉!再次感谢!
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2016-03-13
    • 2015-07-29
    • 2013-09-17
    • 2013-04-09
    相关资源
    最近更新 更多