将 yz- 和 xz-grid 添加到 scatterplot3d [英] Add yz- and xz-grid to scatterplot3d

查看:61
本文介绍了将 yz- 和 xz-grid 添加到 scatterplot3d的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

if (xy.grid) {i <- x.min:x.max段(i, z.min, i + (yx.f * y.max), yz.f * y.max +z.min, col = col.grid, lty = lty.grid)i <- 0:y.max段(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)}如果(xz.grid){我 <- x.min:x.max段(i, y.min, i + (zx.f * z.max), zy.f * z.max +y.min, col = col.grid, lty = lty.grid)i <- 0:z.max段(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)}如果(yz.grid){我 <- y.min:y.max段(i, x.min, i + (yz.f * z.max), zx.f * z.max +x.min, col = col.grid, lty = lty.grid)i <- 0:z.max段(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 <-漂亮(y.range, n = lab[1], min.n = max(1, min(0.5 *实验室[1], p.lab[1])))y.scal <- round(diff(y.prty[1:2]), 数字 = 12)dat$y <- dat$y/y.scaly.range <- range(y.prty)/y.scaly.max <- 天花板(y.range[2])y.min <- 楼层(y.range[1])如果(!is.null(ylim)){y.max <- max(y.max, 天花板(ylim[2]/y.scal))y.min <- min(y.min, floor(ylim[1]/y.scal))}y.range <- 范围(y.min, y.max)

然而,在运行这个新代码时,我遇到了诸如 Error in segment(i, y.min, i + (zx.f * z.max), zy.f * z.max + y.分钟,:未找到对象zx.f".我不确定这个术语在函数代码中是如何定义的以及在哪里定义的.如果能帮助我找到正确的方向,我将不胜感激!

我还在此处附上了 scatterplot3d 函数的原始代码:中找到新函数的源代码.>

此处修改代码:

if ("xy" %in% grid || grid) {i <- x.min:x.max段(i, z.min, i + (yx.f * y.max), yz.f * y.max +z.min, col = col.grid, lty = lty.grid)i <- 0:y.max段(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)}如果(xz"%in% 网格){i <- x.min:x.max段(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)温度 <- yx.f * y.maxtemp1 <- yz.f * y.maxi <- z.min:z.max段(x.min + temp,temp1 + i,x.max + temp,temp1 + i , col = col.grid, lty = lty.grid)}如果(yz"%in% 网格){i <- 0:y.max段(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)温度 <- yx.f * y.maxtemp1 <- yz.f * y.maxi <- z.min:z.max段(x.min + temp,temp1 + i,x.min, i , col = col.grid, lty = lty.grid)}

In using the function scatterplot3d() from the scatterplot3d package, grid=TRUE only plots the grid for XY-plane. A look at the function source code has only X and Y components. I want to draw the grid for YZ- and XZ- planes as well, as below in the picture:

I have searched the images for examples of R scatterplot3d images with these grids to no avail. I thought about s3d$plane3d but the planes that were generated look very messy.

I have not have experience editing codes or writing function in R. I thought I could add in arguments xy.grid, yz.grid, and xz.grid and then modify the original definition for grid, like this:

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)
}

And I also try to add in this block of code in congruent fashion to x and z to define these y terms.

   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)

However, when running this new code I encounter errors such as Error in segments(i, y.min, i + (zx.f * z.max), zy.f * z.max + y.min, : object 'zx.f' not found. I am not sure how and where this term is term is defined in the function code. I would appreciate some help in leading me to the right direction thanks!

I have also attached an original code for the scatterplot3d function here: scatterplot3d function source code

解决方案

I create a new function, that add grid to xy and/or yz function. The argument grid now , can take a list like 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")

You can find the source code of the new function, in this gist.

Here the code modified:

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)



    }

这篇关于将 yz- 和 xz-grid 添加到 scatterplot3d的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆