plotting label names onto 3D plot generated by plot3d (rgl)

Annemarie picture Annemarie · Jan 4, 2012 · Viewed 13.5k times · Source

I would like to plot results from a MDS analysis with 3 dimensions using plot3d() (rgl). Data and code look like this:

   threedim$points
              [,1]        [,2]      [,3]        [,4]
   Dutch      -6.45931417  -2.1589222 -5.829244  -0.4891066
   German     -7.27770201   0.2666916 -2.198595   6.8658602
   Albanian    4.11799731   0.6810336 11.356935  -2.2623921
   Armenian   13.58431670  21.6527626 -2.245146   6.3506665
   French     -0.24170759  -0.8579159 14.197611  -0.1871443

   threedim$points[,1] -> x
   threedim$points[,2] -> y
   threedim$points[,3] -> z
   library(rgl)
   plot3d(x,y,z)
   text(c("Dutch","German","Albanian","Armenian","French"))

I get the following error message:

"Warning message: In xy.coords(x, y, recycle = TRUE) : NAs introduced by coercion"

What am I doing wrong?

Answer

Ben Bolker picture Ben Bolker · Jan 4, 2012

Use text3d rather than trying to mix text (base graphics) with rgl graphics ...

dat <- read.table(textConnection(
"nation    x y z w                                 
Dutch      -6.45931417  -2.1589222 -5.829244  -0.4891066
German     -7.27770201   0.2666916 -2.198595   6.8658602
Albanian    4.11799731   0.6810336 11.356935  -2.2623921
Armenian   13.58431670  21.6527626 -2.245146   6.3506665
French     -0.24170759  -0.8579159 14.197611  -0.1871443"),
header=TRUE,as.is=TRUE)

library(rgl)
with(dat,plot3d(x,y,z))
with(dat,text3d(x,y,z,nation))