[R]: (Lattice): Overlaying more than one trend surface using contourplot() and wireframe()
Peter Ho
peter at fe.up.pt
Sat Aug 7 18:29:31 CEST 2004
Deepayan,
Thanks alot for your help. I managed to rescale the 3rd response
variable, which was what Montgomery did in the example. Plotting the
3rd surface was as easy as including a 3rd argument for "MW".
The only problem now is to work out how to shade a particlar area of
interest, depending on selected constrainst for each response. I ´ll
try working on that next.
Many thanks again
Peter
Deepayan Sarkar wrote:
>On Friday 06 August 2004 10:47, Peter Ho wrote:
>
>
>>Hi,
>>
>>Is there a way to plot more than one trend surface using the
>>functions contourplot() and wireframe(). I have found an add=T in
>>contour(), but no equivalent argument in contourplot() and
>>wireframe()?
>>
>>I have taken the example 11-2 (pages 441-451) from Design and
>>analysis of experiments (Montgomery 2001, 5th edition) to see if
>>this could be done in R. I have managed to plot individual contours
>>for each response after using the surf.ls() and trmat() functions
>>from the Spatial package, but have been unable to overlay the
>>contours. Ideally, it would be nice to also choose a different set
>>of colours for shading the surface, so that when combing surfaces, we
>>can immediately identify the optimum conditions. The final overlaid
>>plot is shown on page 451 (Figure 11-16) of the book.
>>
>>
>
>I don't have access to that book, so a scan or a rough sketch of what
>that looks like would be helpful.
>
>Ideally, this sort of thing should be done by using a groups= argument.
>This needs your data to be restructured into a single data frame, e.g.:
>
>trsurfY$z <- as.vector(trsurfY$z)
>trsurfV$z <- as.vector(trsurfV$z)
>trsurfMW$z <- as.vector(trsurfMW$z)
>
>trsurf.comb <- rbind(as.data.frame(trsurfY),
> as.data.frame(trsurfV),
> as.data.frame(trsurfMW))
>trsurf.comb$g <-
> factor(rep(c("Y", "V", "MW"),
> each = length(trsurfY$x)))
>
>
>The subsequent call should be like
>
>contourplot(z ~ x * y, trsurf.comb, groups = g)
>
>Unfortunately, contourplot has no idea how to deal with groups, so you
>will have to tell it by writing your own panel function:
>
>
>contourplot(z ~ x * y, trsurf.comb,
> subset = g %in% c("V", "Y"),
> groups = g, cuts = 30,
> panel = function(..., groups, subscripts) {
> gvals <- levels(groups)
> for (i in gvals)
> {
> panel.levelplot(...,
> subscripts = subscripts[groups[subscripts] == i])
> ## panel.contourplot should also work here,
> ## but doesn't because I forgot to export it
> }
> })
>
>Note that the range of the z-values in your 3rd group (MV) is very
>different from the other 2, so trying to include all 3 won't work
>unless you specify an appropriate 'at' vector that covers the ranges of
>all 3 surfaces (by default it will try to put contours at evenly spaced
>locations over the whole range, almost all of which will miss the
>data).
>
>I have no idea what you were hoping to do with levelplots (where the
>inter-contour regions are colored).
>
>You can do something similar with wireframe to get the 3 surfaces
>together. It does know how to handle groups, so the call is simpler.
>(Note that this doesn't really work if your surfaces intersect, but you
>can usually get by with making the grid fine enough.):
>
>
>wireframe(z ~ x * y, trsurf.comb, groups = g,
> subset = g %in% c("V", "Y"), shade = TRUE)
>
>
>Hope that helps,
>
>Deepayan
>
>
>
>
>
More information about the R-help
mailing list