Marouen
Marouen

Reputation: 945

display point labels in scatter3d

I plotted a 3d scatter plot in R using the scatter3d function. Now, I want to plot the labels on every dot in the 3d scatter, such as every point has its ID next to it i.e., "1", "2" etc..

Here is what I tried:

library("car")
library("rgl")
scatter3d(geometry[,1],geometry[,2],geometry[,3] , surface=FALSE, labels = rownames(geometry), id.n=nrow(geometry))

This tutorial says that adding arguments labels=rownames(geometry), id.n=nrow(geometry) should display the labels on every dot but that did not work.

EDIT:

I uploaded the coordinate file here, you can read it like this

geometry = read.csv("geometry.txt",sep = " ")
colnames(geometry) = c("x","y","z")

EDIT:

Actually, even the example from the tutorial does not label the points and does not produce the plot displayed. There is probably something wrong with the package.

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

Upvotes: 4

Views: 3027

Answers (2)

thistleknot
thistleknot

Reputation: 1158

After much messing around I got it (I also have the method for plot_ly if you,re interested)

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()

Upvotes: 0

Naveen
Naveen

Reputation: 1210

I can give you a quick fix if you want to use any other function other than scatter3d. This can be achieved using plot3d and text3d function. I have provided the basic code block of how it can be implemented. You can customize it to your needs.

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)

Upvotes: 3

Related Questions