Creating smooth color regions with panel.contourplot()
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.