Заставляйте точки «заглядывать» под поверхность в R с помощью решетки и каркаса

Я работал над довольно сложной диаграммой в R. У меня есть каркас с поверхностью и точками, распределенными в пространстве X, Y, Z повсюду (например, под поверхностью и над Это).

Проблема в том, что точки на графике не «выглядят» так, как будто они находятся под поверхностью.

Я пытаюсь понять, как лучше всего визуализировать эту диаграмму, чтобы точки смотрели под поверхность. Пример кода для каркаса и облака взят отсюда: R-List Posting

Код в примере:

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

Screen Capture

Глядя на мой пример, точки в точках на самом деле находятся на вертикальной линии, где X, Y = (2, -2), а z изменяется от 0,5 до -,5.

Однако, на мой взгляд, третья точка не выглядит так, как будто она находится под поверхностью, она выглядит так, как будто она находится в координатах (2, -3,0).

Это просто мой глаз неверно истолковал это?

Есть ли у кого-нибудь предложения, как сделать мои очки более трехмерными? Возможно, приглушить цвет точки, чтобы она выглядела «под поверхностью», используя какую-то прозрачность на поверхности?

Я попытался сделать цвета точек разными (красный - над поверхностью, синий - под поверхностью. ), но это не очень помогает графику.

5
задан user918967 22 December 2011 в 18:12
поделиться