On 12/03/2009 6:51 AM, Duncan Murdoch wrote:
On 11/03/2009 11:35 PM, Oliver wrote:
hi, all
I am looking at R package RGL to draw a colored mesh/surface plot like
this one (from matlab).
http://www.mathworks.com/access/helpdesk/help/techdoc/visualize/cbar.gif
The key features I am looking for is surfaced with grid and color, but
not the terrain-like gradient. but I didn't come even close to it
after browsing through rgl help file.
It is a little tricky to draw both lines and solid colours on a surface
in rgl, because one will hide the other: there's no way to turn off the
hidden object removal in rgl.
The easiest way to do it would be to draw the grid slightly above the
surface. For example,
x <- seq(-2, 2, len=17)
y <- seq(-2, 2, len=17)
z <- outer(x,y, function(x,y) exp(-y^2)*sin(1.5*x))
color <- rainbow(41)[1+round(10*outer(x,y, function(x,y) x^2 + y^2))]
persp3d(x,y,z, color=color, smooth=FALSE)
surface3d(x,y,z+0.001, front="lines", back="culled")
(Fiddle with the 0.001 value if the grid disappears behind the surface,
or floats too high above it.)
Another way would be to draw the grid (and maybe the colour) as a texture.
I just did that, and it does look better. The texture was a simple
100x100 PNG image grid.png that was white with a black border 1 pixel
wide. (Fiddle with the dimensions and border width for different weight
of grid lines.) Then for 4 grid lines per unit of x and y (the same as
the colour grid), do this:
# First, repeat the lines above:
x <- seq(-2, 2, len=17)
y <- seq(-2, 2, len=17)
z <- outer(x,y, function(x,y) exp(-y^2)*sin(1.5*x))
color <- rainbow(41)[1+round(10*outer(x,y, function(x,y) x^2 + y^2))]
# Create texture coordinates
s <- outer(x, y, function(x, y) 4*x)
t <- outer(x, y, function(x, y) 4*y)
# Draw with a texture
persp3d(x,y,z, color=color, texture_s=s, texture_t=t,texture="grid.png",
smooth=FALSE)
This doesn't look good when it's small (the grid lines tend to disappear
when reduced), but looks fine in large sizes. Use fatter borders or a
smaller texture if you want it to look good when small.
Duncan Murdoch
______________________________________________
R-help@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.