[R] Creating smooth color regions with panel.contourplot()

David Carslaw d.c.carslaw at its.leeds.ac.uk
Wed Sep 17 22:12:34 CEST 2008


I think this is a very useful function that I imagine has wide appeal -
thanks.  Using the code below produces the plot OK but when I try and
copy/save it (as a metafile) I receive the following error and an hourglass:

Error: invalid graphics state

[using XP, 2.72, lattice 0.17.13]

Regards,
David



Deepayan Sarkar wrote:
> 
> On 9/15/08, Waichler, Scott R <Scott.Waichler at pnl.gov> wrote:
>> When I use panel.contourplot() with filled color regions, the coloring
>>  follows the stair-step edge of the underlying grid instead the smooth
>>  contour lines themselves.  How can I get the latter behavior?  I would
>>  guess there is a much simpler way than manually creating polygons with
>>  contourLines(), especially since a contour interval/region can have
>>  holes inside it (different contour intervals).
> 
> Manually creating polygons with contourLines will not really help
> because (1) as you noted, there will be holes, and (2) contours that
> cross edges will be open. The only real solution is to color each
> rectangle individually, and that would be very inefficient in R code
> (grid does not have a C-level interface).
> 
> The good news is that filled.contour() already does this efficiently,
> and you can use that through the gridBase package:
> 
> 
> panel.filledcontour <-
>     function(x, y, z, subscripts,
>              at,
>              col.regions = cm.colors,
>              col = col.regions(length(at) - 1),
>              ...)
> {
>     stopifnot(require("gridBase"))
>     z <- matrix(z[subscripts],
>                 nrow = length(unique(x[subscripts])),
>                 ncol = length(unique(y[subscripts])))
>     if (!is.double(z)) storage.mode(z) <- "double"
>     opar <- par(no.readonly = TRUE)
>     on.exit(par(opar))
>     if (panel.number() > 1) par(new = TRUE)
>     par(fig = gridFIG(), omi = c(0, 0, 0, 0), mai = c(0, 0, 0, 0))
>     cpl <- current.panel.limits()
>     plot.window(xlim = cpl$xlim, ylim = cpl$ylim,
>                 log = "", xaxs = "i", yaxs = "i")
>     .Internal(filledcontour(as.double(do.breaks(cpl$xlim, nrow(z) - 1)),
>                             as.double(do.breaks(cpl$ylim, ncol(z) - 1)),
>                             z, as.double(at), col = col))
> }
> 
> plot.new()
> 
> levelplot(volcano, panel = panel.filledcontour,
>           col.regions = terrain.colors,
>           cuts = 25)
> 
> -Deepayan
> 
> ______________________________________________
> 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.
> 
> 


-----
Institute for Transport Studies
University of Leeds
-- 
View this message in context: http://www.nabble.com/Creating-smooth-color-regions-with-panel.contourplot%28%29-tp19501169p19540180.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list