[R] question on rgl.surface
murdoch at stats.uwo.ca
Sun Jun 22 03:38:04 CEST 2008
On 21/06/2008 2:48 PM, Mark Kimpel wrote:
> I'd like to use rgl.surface (or some other function if more
> appropriate) to create a horizontal and vertical transparent grey
> slice (plane) running through both the x and y origins and extending
> across the z axis, i.e. the 3-d equivalent of the normal 2-d
> coordinate axes we are all familiar with. The examples for rgl.surface
> are a bit more complex than what I need and I am having trouble
> understanding them.
> Here is the code if I come up with, but which obviously doesn't work.
> d3.mat <- matrix(runif(30, min = -5, max = 5), ncol = 3, nrow = 10)
> plot3d(x = d3.mat, type = "s", col = "blue", size = 0.33, xlab ="x",
> ylab = "y", zlab = "z")
> x <- 0
> y <- 0
> z <- matrix(c(floor(min(d3.mat[,1])),ceiling(max(d3.mat[,1])),floor(min(d3.mat[,3])),ceiling(max(d3.mat[,3]))),nrow
> = 2, ncol =2)
> rgl.surface(x, z, y, color="grey", back="lines")
You used open3d(), so you should use surface3d(), not rgl.surface().
The *3d functions interact with each other differently than the lower
level rgl.* functions, and it's usually not a good idea to mix them.
You could get what you want with quads3d, by working out the corners of
the rectangle you want:
quads3d(0, range(d3.mat[,2])[c(1:2,2:1)], range(d3.mat[,3])[c(1,1,2,2)],
quads3d(range(d3.mat[,1])[c(1:2,2:1)], 0, range(d3.mat[,3])[c(1,1,2,2)],
(This will look strange after your rgl.surface() call, but would
otherwise be fine.)
There's also the grid3d() function if you want lines on the grids, e.g.
> What am I doing wrong?
> And, while I'm at it, there is another minor question I have, which is
> "how can I exaggerate the size difference in the spheres between front
> and back?"
You want to change your viewpoint so that the screen is displayed as if
it is closer to you. The middle mouse button normally controls that, or
you can increase the par3d("FOV") value from the default of 30.
More information about the R-help