Tamas Papp
2003-Jul-11 15:26 UTC
[R] 3d plot with different levels done in different colors
I would like a 3d plot of a matrix such that individual trapezoids that make up the surface are colored according to the z-value of that point (or preferably the midpoint of its four corners, or something similar). MS Excel has something like that. I know that persp can have an nx by ny matrix its "col" argument, I just don't know how to generate that matrix. To calculate the midpoint of the tiles for the matrix z, I could use something like zz <- (z[-1,-1] + z[-1,-nrow(z)] + z[-ncol(z),-1] + z[-ncol(z),-nrow(z)])/4 but I don't know how to assign a color to that value. For example if I have boundaries <- c(0, .5, 1, 1.5) and colors <- c("red", "green", "blue") I am looking for a function that assigns red to the elements of zz between 0 and .5, etc. Alternative solutions are welcome, maybe somebody has already wrote a library that does the whole thing neatly. Thanks, Tamas -- Tam?s K. Papp E-mail: tpapp at axelero.hu (preferred, especially for large messages) tpapp at westel900.net Please try to send only (latin-2) plain text, not HTML or other garbage.
Jerome Asselin
2003-Jul-11 20:49 UTC
[R] 3d plot with different levels done in different colors
Hi, Consider this example which I have modified from the persp() help file. It uses topo.colors() to create a series of colors. Cheers, Jerome x <- seq(-10, 10, length= 30) y <- x f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } z <- outer(x, y, f) z[is.na(z)] <- 1 op <- par(bg = "white") zz <- (z[-1,-1] + z[-1,-ncol(z)] + z[-nrow(z),-1] + z[-nrow(z),-ncol(z)])/4 cols <- topo.colors(length(zz)) cols[order(zz)] <- cols persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = cols) On July 11, 2003 08:26 am, Tamas Papp wrote:> Content-Length: 1223 > Status: R > X-Status: N > > I would like a 3d plot of a matrix such that individual trapezoids > that make up the surface are colored according to the z-value of that > point (or preferably the midpoint of its four corners, or something > similar). MS Excel has something like that. > > I know that persp can have an nx by ny matrix its "col" argument, I > just don't know how to generate that matrix. To calculate the midpoint > of the tiles for the matrix z, I could use something like > > zz <- (z[-1,-1] + z[-1,-nrow(z)] + z[-ncol(z),-1] + > z[-ncol(z),-nrow(z)])/4 > > but I don't know how to assign a color to that value. For example if I > have > > boundaries <- c(0, .5, 1, 1.5) > > and > > colors <- c("red", "green", "blue") > > I am looking for a function that assigns red to the elements of zz > between 0 and .5, etc. Alternative solutions are welcome, maybe > somebody has already wrote a library that does the whole thing neatly. > > Thanks, > > Tamas