在 R (rgl) 中,如何在 plot3d 中打印点的阴影?

In R (rgl), how to print shadows of points in plot3d?

在 R 中,使用包 rgl,我想在 plot3d() 中添加点的阴影,如下图所示。

我已经使用 grid3d() 添加了底部网格,但仍然不知道如何添加阴影。如果我绘制相同的点,将第 3 轴值更改为其最小值(图像中的 -100),绘图区域会自动增加,在点和网格之间留下间隙。有更好的方法吗?

我认为问题很明显,但这里有一个示例代码:

library(rgl)
df <- data.frame(x=rnorm(100),
                 y=rnorm(100),
                 z=rnorm(100))
plot3d(df)
grid3d('z')

z 设置为最小值的想法失败了,因为 rgl 使边界区域略大。但是您可以从网格中获取 z 值并使用它。您还可以告诉 rgl 不要扩展边界框以包含新点。这段代码同时做了两件事:

library(rgl)
df <- data.frame(x=rnorm(100),
                 y=rnorm(100),
                 z=rnorm(100))
plot3d(df)
id <- grid3d('z')                            # Get id values for grid
gridz <- rgl.attrib(id[1], "vertices")[1,3]  # Use the first z value
save <- par3d(ignoreExtent = TRUE)           # Ignore points for bbox
with(df, points3d(x, y, gridz, col = "gray"))# Plot the "shadows"
par3d(save)                                  # Restore bbox status

这是我得到的:

现在可以使用方便的 show2d 函数来生成所需的 2D 投影

library(rgl)
df <- data.frame(x=rnorm(100),
                 y=rnorm(100),
                 z=rnorm(100))
plot3d(df)
grid3d('z')

show2d({
  par(mar=c(0,0,0,0))
  plot(x = df$x, y = df$y, 
       col = "black")
})