Dear All, I have been trying to to do this for a few days now. I can generate persp plot OK and can generate it in colour using the command persp(x,y,z,col=terrain.colors(20)) However, I was wondering if it is possible to shade the 3d surface like a contour plot. i.e. black for large z, white for small z, say Thanks in advance Colin -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
On Thu, Oct 26, 2000 at 11:46:43AM +0100, Colin Gillespie wrote:> Dear All, > I have been trying to to do this for a few days now. I can generate > persp plot OK and can generate it in colour using the command > > persp(x,y,z,col=terrain.colors(20)) > > However, I was wondering if it is possible to shade the 3d surface like a > contour plot. i.e. black for large z, white for small z, sayHere is a quick and trivial example which shows you how. # Create a simple surface f(x,y) = x^2 + y^2 nx <- 21 ny <- 21 x <- seq(-1, 1, length = nx) y <- seq(-1, 1, length = ny) z <- outer(x, y, function(x,y) x^2 + y^2) # Average the values at the corner of each facet # and scale to a value in [0, 1]. We will use this # to select a gray for colouring the facet. hgt <- 0.25 * (z[-nx,-ny] + z[-1,-ny] + z[-nx,-1] + z[-1,-1]) hgt <- zmid / max(zmid) # Plot the surface with the specified facet colours. persp(x, y, z, col = gray(1 - hgt)) You can use something similar to select colours from one of the other standard palettes. E.g persp(x, y, z, col=cm.colors(20)[floor(19*hgt+1)]) Hope this helps. Ross -- +----------------------------------------------------------------------+ | Ross Ihaka Email: ihaka at stat.auckland.ac.nz | | Department of Statistics Phone: (64-9) 373-7599 x 5054 | | University of Auckland Fax: (64-9) 373-7018 | | Private Bag 92019 | | Auckland, New Zealand | +----------------------------------------------------------------------+ -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
On Fri, Oct 27, 2000 at 12:42:41AM +1300, Ross Ihaka wrote: Bill Simpson points out that I messed up in my code (never make last minute readability changes). Here is a correct version (with the function changed to a saddle. # Create a simple surface f(x,y) = x^2 - y^2 nx <- 21 ny <- 21 x <- seq(-1, 1, length = nx) y <- seq(-1, 1, length = ny) z <- outer(x, y, function(x,y) x^2 - y^2) # Average the values at the corner of each facet # and scale to a value in [0, 1]. We will use this # to select a gray for colouring the facet. hgt <- 0.25 * (z[-nx,-ny] + z[-1,-ny] + z[-nx,-1] + z[-1,-1]) hgt <- (hgt - min(hgt))/ (max(hgt) - min(hgt)) # Plot the surface with the specified facet colours. persp(x, y, z, col = gray(1 - hgt), theta = 35) persp(x, y, z, col = cm.colors(10)[floor(9 * hgt + 1)], theta = 35) Ross -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._