From: Duncan Murdoch <murdoch_at_stats.uwo.ca>

Date: Fri, 25 Jul 2008 14:14:17 -0400

>>> 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')
*

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Fri 25 Jul 2008 - 18:23:17 GMT

Date: Fri, 25 Jul 2008 14:14:17 -0400

On 7/25/2008 12:20 PM, Tom La Bone wrote:

> On further experimentation I find that "points" (via points3d) serve my > purpose well (instead of the much prettier but more troublesome spheres). > The default "point" appears to be a square. Is there a way to make it a > circle?

Not very easily. Now you can ask for text of a letter "o" and that is not too bad. You might be able to do it using "sprites".

Duncan Murdoch

> > Tom > > > > > Duncan Murdoch-2 wrote: >> >> On 7/25/2008 11:01 AM, Tom La Bone wrote:

>>> After looking around a bit more I found the example I was looking for --

>> >> >> I think you're seeing the effect of the inaccurate bounding box >> calculation described in ?spheres3d. The problem is that you're asking >> for a sphere, but your axes are on wildly different scales. The >> bounding box calculation for that situation fails. >> >> You can work around this by telling rgl to ignore the extent of the >> spheres (via par3d(ignoreExtent=TRUE)), and plot some points in the >> corners of the bounding box you really want. Set their alpha to 0 and >> they'll be invisible. >> >> Some day I'll probably fix this, but it's likely to be a while. >> >> Duncan Murdoch >> >> ______________________________________________ >> R-help_at_r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >> > ______________________________________________R-help_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Fri 25 Jul 2008 - 18:23:17 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Fri 25 Jul 2008 - 19:32:29 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*