将 yz- 和 xz-grid 添加到 scatterplot3d [英] Add yz- and xz-grid to 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屋!