我正在尝试重现这个图,即顶部有点和线的表面 .
enter image description here

作为参考,该图来自第160页(图4.8)Wood - GAM an introduction with R .

为了使这个例子可以重现,我使用了数据

library(data.table)
library(lattice)
library(latticeExtra)
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)
    })
surf <- as.data.table(surf)
pts <- surf[x==2.37222302413923]

使用我使用的面板功能调整线框功能

wireframe(z ~ x * y, surf, aspect = c(1, .5),
        screen = list(z=-160, x=-70),
          scales = list(arrows = FALSE),
        shade=TRUE,
        shade.colors = function(irr, ref, height, w = 0.4){grey(w * irr + (1 - w)*(1 - (1 - ref)^0.4))},
        light.source= c(0,10,10),
          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,
                    col="black",
                    type="l", 
                    pch=19,
                    cex=1,
                              ...)
          })

要得到

enter image description here

我同意这不是很漂亮但它至少是一条线和一个表面的组合 . 无论如何,我不知道如何添加多行,因为在panel-argument中更改x将通过获得彼此不平行的行(R连接所有点)来产生有线结果 . 进一步如何在顶部添加积分?