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

时间:2018-04-25 17:08:37

标签: r data-visualization rgl

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

plot3d with shadows

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

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

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

2 个答案:

答案 0 :(得分:5)

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

这是我得到的:

enter image description here

答案 1 :(得分:2)

现在可以使用方便的 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")
})

enter image description here