“提出意见”;“看”;利用格和线框的R中的下曲面

“提出意见”;“看”;利用格和线框的R中的下曲面,r,3d,points,lattice,wireframe,R,3d,Points,Lattice,Wireframe,我一直在研究R中一个相当复杂的图表。我有一个线框,它有一个曲面和分布在X、Y、Z空间的点(例如曲面下方和上方) 问题是,绘制的点“看起来”不像是在曲面下面 我正试图找出如何最好地可视化这张图表,使点看起来在表面之下。线框和云的一些示例代码如下: 示例中的代码如下所示: library(lattice) surf <- expand.grid(x = seq(-pi, pi, length = 50), y = seq(-pi, pi, length = 50))

我一直在研究R中一个相当复杂的图表。我有一个线框,它有一个曲面和分布在X、Y、Z空间的点(例如曲面下方和上方)

问题是,绘制的点“看起来”不像是在曲面下面

我正试图找出如何最好地可视化这张图表,使点看起来在表面之下。线框和云的一些示例代码如下:

示例中的代码如下所示:

library(lattice)
surf <-
expand.grid(x = seq(-pi, pi, length = 50),
            y = seq(-pi, pi, length = 50))

surf$z <-
with(surf, {
    d <- 3 * sqrt(x^2 + y^2)
    exp(-0.02 * d^2) * sin(d)
})

g <- surf

pts <-   data.frame(x =rbind(2,2,2), y=rbind(-2,-2,-2), z=rbind(.5,0,-.5))

wireframe(z ~ x * y, g, aspect = c(1, .5),
      drape=TRUE,
      scales = list(arrows = FALSE),
      pts = pts,
      panel.3d.wireframe =
      function(x, y, z,
               xlim, ylim, zlim,
               xlim.scaled, ylim.scaled, zlim.scaled,
               pts,
               ...) {
          panel.3dwire(x = x, y = y, z = z,
                       xlim = xlim,
                       ylim = ylim,
                       zlim = zlim,
                       xlim.scaled = xlim.scaled,
                       ylim.scaled = ylim.scaled,
                       zlim.scaled = zlim.scaled,
                       ...)
          xx <-
              xlim.scaled[1] + diff(xlim.scaled) *
                  (pts$x - xlim[1]) / diff(xlim)
          yy <-
              ylim.scaled[1] + diff(ylim.scaled) *
                  (pts$y - ylim[1]) / diff(ylim)
          zz <-
              zlim.scaled[1] + diff(zlim.scaled) *
                  (pts$z - zlim[1]) / diff(zlim)
          panel.3dscatter(x = xx,
                          y = yy,
                          z = zz,
                          xlim = xlim,
                          ylim = ylim,
                          zlim = zlim,
                          xlim.scaled = xlim.scaled,
                          ylim.scaled = ylim.scaled,
                          zlim.scaled = zlim.scaled,
                          ...)
      })
库(晶格)

冲浪这可能会让你开始:

library(emdbook)
sfun <- function(x,y) {
  d <- 3 * sqrt(x^2 + y^2)
  exp(-0.02 * d^2) * sin(d)
}

cc <- curve3d(sfun(x,y),xlim=c(-pi,pi),ylim=c(-pi,pi),n=c(50,50),
        sys3d="rgl")

colvec <- colorRampPalette(c("pink","white","lightblue"))(100)
with(cc,persp3d(x,y,z,col=colvec[cut(z,100)],alpha=0.5))
pts <-   data.frame(x=c(2,2,2), y=c(-2,-2,-2), z=c(.5,0,-.5))
with(pts,spheres3d(x,y,z,col="blue",radius=0.1))
rgl.snapshot("rgltmp1.png")
库(emdbook)

sfun使用rgl软件包会更简单,该软件包完全支持透明、照明和场景的构建,其中已知对象位于特定表面的“前面”或“后面”。如何将上面的代码转换为使用rgl?我以前没用过..嗨,本,我完全被rgl搞糊涂了。坦率地说,我不知道从哪里开始。你能给我一些关于转到rgl的建议吗?谢谢我不知道它是否可行,但如何改变大小取决于距离的某个点,代表观众。如果你不想玩W/<代码> RGL< /代码>,或者尝试马珂关于透视的想法,或者考虑用较轻的值或透明度绘制“下”点。R通过
color=#xxyyzaa
支持十六进制透明代码,其中前三个十六进制对是RGB,最后一个是透明(00=不可见,ff=全色)。