[R] "Over-coloring" facets on persp() plot

David Winsemius dwinsemius at comcast.net
Sun Nov 22 15:18:47 CET 2009


On Nov 22, 2009, at 7:07 AM, Duncan Murdoch wrote:

> On 22/11/2009 1:07 AM, Marc Chiarini (Tufts) wrote:
>> Dear R Community:
>> Recently, I have managed to plot some really useful graphs of my  
>> research data using persp().  I have even figured out how to  
>> overplot rectangular regions (corresponding to submatrices) with a  
>> different color.  This is accomplished by using par(new=T).  I am  
>> now searching for a way to "highlight" a set of (possibly non- 
>> contiguous) facets with a specific color, e.g., the facet between  
>> each set of four points whose values are all above a certain  
>> threshold.  An example would be coloring the raised corners of the  
>> classic sombrero (found in example(persp)) differently from the  
>> rest of the sombrero.  I feel like the last example in persp() is  
>> pointing me in the right direction, but I'm not quite getting it.   
>> Any help is much appreciated.
>
> Think of the facets as an nx-1 by ny-1 matrix.  Pass the col arg by  
> creating a matrix of this shape.  (A vector version of the data in  
> the matrix would also be good enough.)

I came close to coloring the "top" facet, but did not quite get there  
with:

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")

  zcol <- as.vector( z[-1,-1] == max(z) )  # Need to exclude two  
sides, I think

persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = ifelse(zcol ,  
"red", "lightblue"),
       ltheta = 120, shade = 0.75, ticktype = "detailed",
       xlab = "X", ylab = "Y", zlab = "Sinc( r )"
      )
par(op)

I did not get precisely the top facet in part, because there are 4 z  
elements at the max.

--
David.


>
> If you pass something shorter, it will be recycled to that length.
>
> You could also use persp3d from the rgl package, but an important  
> difference is that it colours all nx by ny vertices, and  
> interpolates colours on the facets.  So you can't use the same  
> colour matrix as in persp.
>
> 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.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list