[R] persp, add lines/highlights

Paul Murrell p.murrell at auckland.ac.nz
Tue May 31 22:41:44 CEST 2005


Hi


Robin Hankin wrote:
> Hello everyone
> 
> I always cut-n-paste Paul's suggestions and end up learning something!
> 
> In this case, though, I have a query.
> 
> I was wondering how the second persp() call dealt with hidden line
> removal,  because pieces of mesh with NA values are see-through.
> 
> If you replace xi in the code below with 10:28
> and yi with 19:20, then all the pink grid
> appears in front of the blue grid; I would expect  the blue grid to hide 
> some of the pink
> grid.  Is there any way to enforce
> hidden line removal here?


persp() just draws the mesh from "back" to "front";  a sort of 
brute-force hidden-line removal.  R graphics has a simple "painters" 
model with later output overlaying previous output;  so you can only 
draw extra stuff on the "front" of a persp() plot.  If you want more 
sophisticated hidden-line removal you'll probably have to go to the rgl 
package (which does the real thing).

Paul


> On May 31, 2005, at 01:14 am, Paul Murrell wrote:
> 
>> Hi
>>
>>
>> jjorgensen at fastmail.fm wrote:
>>
>>> Hello R-sters,
>>> I'm trying to add several lines to a response surface that I've plotted
>>> using persp().  I've tried lines() using the "trans3d" function but I've
>>> been unsuccessful in getting it to work (R v2.0.1).  Essentially, I'm
>>> trying to highlight one or more of the surface wireframe lines in a
>>> bolder (or different) color.  Any tips from those of you who have some
>>> experience with this would be greatly appreciated.  [Would it be easier
>>> using wireframe() in library(lattice) instead?]
>>
>>
>>
>> Here's an example that just overlays two persp() plots ...
>>
>> 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")
>> persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue",
>>       zlim=range(z))
>>
>> # overlay plot with just "highlighted" surface area
>> par(new=TRUE)
>> z2 <- matrix(NA, ncol=30, nrow=30)
>> xi <- 15:18
>> yi <- 13:14
>> z2[xi, yi] <- z[xi, yi]
>> persp(x, y, z2, theta = 30, phi = 30, expand = 0.5,
>>       zlim=range(z), border="red", col="pink", box=FALSE, axes=FALSE)
>>
>>
>>> And, any suggestions on how to add text outside of the persp() plot next
>>> to the highlighted line would be much appreciated.
>>
>>
>>
>> Do you mean like a legend?
>>
>> Paul
>> -- 
>> Dr Paul Murrell
>> Department of Statistics
>> The University of Auckland
>> Private Bag 92019
>> Auckland
>> New Zealand
>> 64 9 3737599 x85392
>> paul at stat.auckland.ac.nz
>> http://www.stat.auckland.ac.nz/~paul/
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide! 
>> http://www.R-project.org/posting-guide.html
>>
>>
> -- 
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
>  tel  023-8059-7743


-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/




More information about the R-help mailing list