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

Deepayan Sarkar deepayan.sarkar at gmail.com
Wed Sep 17 22:25:58 CEST 2008


On Wed, Sep 17, 2008 at 1:12 PM, David Carslaw
<d.c.carslaw at its.leeds.ac.uk> wrote:
>
> 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]

Yes, that's the drawback of mixing grid and base graphics (even
resizing the screen device will not work). However, if you explicitly
start a device and plot to it, instead of copying from a screen
device, that should work fine.

-Deepayan

>
> 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.
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list