如何在RGB设备中添加多个数据子集(例如球体或点)? add = T不起作用

时间:2019-01-06 16:12:59

标签: 3d rgl

我的rgl.spheres需要帮助。我有下面的代码,并且在rgl设备内以球形形式添加一组数据正在(对于整个数据集)在3D中工作。我只是创建了这些数据的子集,并希望以不同的颜色绘制它们,甚至定制它们以为每个子集添加一个椭圆。

就像通常在2D中使用“正常” R型图一样,我只是像打开图一样

plot(x,y, col="red", cex=1, ...)使用“ points”命令,将每个子集添加到初始图下方。我想为rgl设备使用相同的结构,但是即使在rgl.spheres(....add=T)内部也无法正常工作。有没有人想克服这个问题?致以最诚挚的问候,并非常感谢克里斯

我已经尝试在rgl.spheres(... add=T)中使用,并试图(自己)找到诸如add.spheres(...)或rgl.add.spheres(...)之类的逻辑命令,但是这些命令显然不起作用。

rgl.open()
x <- c(1,2,3,4,5,6)
y<-c(9,5,2,7,7,3)
z<-c(0.1,1,1,4,6,7)
x1 <- 1
y1 <- 9
z1 <- 0.1

rgl.spheres(x,y,z, r = 0.1, color = "grey")
rgl.spheres(x1,y1,z1, r=0.1, color="red", add=T) # is not working

因此,如果对rgl中的球体或其他对象有类似“ points”命令的类似命令,则应该有一个红色球体和一些灰色球体。

1 个答案:

答案 0 :(得分:0)

您可能应该使用rgl阅读有关vignette("rgl", package="rgl")的小插图。但快速总结:

  • 请勿使用rgl.*函数。它们是低级功能,除非您对它们的工作原理非常熟悉,否则将给您带来麻烦。使用*3d函数,例如open3dspheres3d
  • 大多数绘图功能(包括spheres3d)总是添加到当前场景中。您不需要add = TRUE
  • 默认情况下,如果在同一位置绘制两个对象,则将显示首先绘制的内容。由于您绘制球体的两条指令都包含点(1, 9, 0.1),因此只有第一个会出现。您可以通过以下方式覆盖它 或通过使用材质属性depth_test的设置,使第二条语句绘制更大的球体(其侧面将更靠近查看器,因此可见)。设置depth_test = "lequal"意味着将显示最后绘制的内容。

将所有这些放在一起,这是您的代码的修订版:

library(rgl)
open3d()
x <- c(1,2,3,4,5,6)
y<-c(9,5,2,7,7,3)
z<-c(0.1,1,1,4,6,7)
x1 <- 1
y1 <- 9
z1 <- 0.1

spheres3d(x,y,z, r = 0.1, color = "grey")
spheres3d(x1,y1,z1, r=0.1, color="red", depth_test = "lequal")