[R] Tutorial on rgl Graphics

Tom La Bone booboo at gforcecable.com
Fri Jul 25 17:01:29 CEST 2008


After looking around a bit more I found the example I was looking for --
plotlm3d, which I found on the R wiki

     http://wiki.r-project.org/rwiki/doku.php?id=graph_gallery:new-graphics

The original author was John Fox, and it was modified by Jose Claudio Faria
and Duncan Murdoch. Below is a simplified version of the function and two
examples. One example was presented as a test of the function and it works
fine. The second example is the plot I want to make and I can't seem to get
the scale on the x and y axes correct. Being unfamiliar with rgl, can
someone provide a hint on how to get the scales right? Thanks for the help.

Tom



plotlm3d <- function (x, y, z,
                      surface        = T,
                      model          = 'z ~ x + y',
                      simple.axes    = T,
                      box            = F,
                      xlab           = deparse(substitute(x)),
                      ylab           = deparse(substitute(y)),
                      zlab           = deparse(substitute(z)),
                      surface.col    = c('blue', 'orange', 'red', 'green',
                                         'magenta', 'cyan', 'yellow',
'gray', 'brown'),
                      point.col      = 'yellow',
                      grid.col       = material3d("color"),
                      grid           = T,
                      grid.lines     = 26,
                      sphere.factor  = 1,
                      threshold      = 0.01)
{
  require(rgl)
  require(mgcv)
  xlab; ylab; zlab
  size <- max(c(x,y,z))/100 * sphere.factor
  if (size > threshold)
    spheres3d(x, y, z, color = point.col, radius = size)
  else
    points3d(x, y, z, color = point.col)
  aspect3d(c(1, 1, 1))
  if (surface) {
    xvals <- seq(min(x), max(x), length = grid.lines)
    yvals <- seq(min(y), max(y), length = grid.lines)
    dat  <- expand.grid(x = xvals, y = yvals)
    for (i in 1:length(model)) {
      mod <- lm(formula(model[i]))
      zhat <- matrix(predict(mod, newdata = dat), grid.lines, grid.lines)
      surface3d(xvals, yvals, zhat, color = surface.col[i], alpha = 0.5, lit
= F)
      if (grid)
        surface3d(xvals, yvals, zhat, color = grid.col, alpha = 0.5,
        lit = F, front = 'lines', back = 'lines') }}
  if(simple.axes) {
    axes3d(c('x', 'y', 'z'))
    title3d(xlab = xlab, ylab = ylab, zlab = zlab)
  }
  else
    decorate3d(xlab = xlab, ylab = ylab, zlab = zlab, box = box)
}

#This is an example of a 3D scatterplot that works fine
x <- c( 274,  180,  375,  205,   86,  265,   98,  330,  195,   53,
       430,  372,  236,  157,  370)
y <- c(2450, 3254, 3802, 2838, 2347, 3782, 3008, 2450, 2137, 2560,
      4020, 4427, 2660, 2088, 2605)
z <- c( 162,  120,  223,  131,   67,  169,   81,  192,  116,   55,
       252,  232,  144,  103,  212)
open3d()
plotlm3d(x, y, z,
         surface = T,
         model   = 'z ~ x + y',
         xlab    = 'x',
         ylab    = 'y',
         zlab    = 'z')

#This is the plot I am trying to make - scales on x and y axes are wrong
x <- c(0.3405,0.1220,0.1028,0.08451,0.05668,0.0345,0.003788,0.002121)
y <- c(0.3460,0.1227,0.1097,0.09666,0.07677,0.06278,0.02168,0.01303)
z <- c(2720,1150,1010,790,482,358,78,35)
open3d()
plotlm3d(x, y, z,
         surface = T,
         model   = 'z ~ x + y - 1',
         xlab    = 'x',
         ylab    = 'y',
         zlab    = 'z')



-- 
View this message in context: http://www.nabble.com/Tutorial-on-rgl-Graphics-tp18649114p18653442.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list