在 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")
})
在 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")
})