在scatter3d中显示数据点标签

4
我使用scatter3d函数在R中绘制了一个三维散点图。现在,我想在三维散点图的每个点上绘制标签,例如每个点都有其ID旁边的标签,即“1”、“2”等。
这是我尝试过的方法:
library("car")
library("rgl")
scatter3d(geometry[,1],geometry[,2],geometry[,3] , surface=FALSE, labels = rownames(geometry), id.n=nrow(geometry))

这篇教程指出添加labels=rownames(geometry), id.n=nrow(geometry)参数应该可以在每个点上显示标签,但并没有生效。
编辑:
我在这里上传了坐标文件here,你可以这样读取它。
geometry = read.csv("geometry.txt",sep = " ")
colnames(geometry) = c("x","y","z")

编辑:

实际上,即使是教程中的示例也没有标记点并且没有生成显示的图。可能包有问题。

scatter3d(x = sep.l, y = pet.l, z = sep.w, 
          surface=FALSE, labels = rownames(iris), id.n=nrow(iris))
2个回答

3

如果您想使用除scatter3d之外的任何其他函数,我可以为您提供快速解决方案。这可以通过使用plot3d和text3d功能来实现。我已经提供了如何实现基本代码块的示例。您可以根据需要自定义它。

plot3d(geometry[,1],geometry[,2],geometry[,3])
text3d(geometry[,1],geometry[,2],geometry[,3],rownames(geometry))
points3d(geometry[,1],geometry[,2],geometry[,3], size = 5)

哪个库提供了这些函数? - Marouen
1
它使用相同的RGL包。你能否尝试使用数据集的子集来确保你的R环境正常工作。 - Naveen
没错,它在较小的数据集上运行良好,我想我的RAM不足以加载3000多个对象。无论如何还是谢谢。 - Marouen

0

折腾了好久,我终于搞定了(如果你感兴趣,我也有 plot_ly 的方法)

test2 <- cbind(dataSet[,paste(d)],set.final$Groups,test)
X <- test2[,1]
Y <- test2[,2]
Z <- test2[,3]

# 3D plot with the regression plane

scatter3d(x = X, y = Y, z = Z, groups = test2$`set.final$Groups`,
          grid = FALSE, fit = "linear",ellipsoid = FALSE, surface=FALSE,
          surface.col = c("green", "blue", "red"),
          #showLabels(x = x, y = y, z = z, labels=test2$test, method="identify",n = nrow(test2), cex=1, col=carPalette()[1], location=c("lr"))
          #labels = test2$test,
          id=list(method = "mahal", n = length(test2$test), labels = test2$test)
          #id.n=nrow(test2$test)
)
          
          
  #identify3d(x = X, y = Y, z = Z, labels = test2$test, n = length(test2$test),  plot = TRUE, adj = c(-0.1, 0.5), tolerance = 20, buttons = c("right"))
  
  
  rglwidget()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接