Filled vector contours
On Aug 24, 2014, at 1:30 PM, Jan Tosovsky wrote:
On 2014-08-24 Prof Brian Ripley wrote:
On 24/08/2014 08:51, Jan Tosovsky wrote:
I am trying to create vector output (SVG) of filled contours.
I've found two approaches so far:
(1)
library('lattice')
svg("D:/test.svg")
filled.contour(volcano)
#levelplot(volcano, panel=panel.levelplot.raster)
dev.off()
(2)
library("raster")
svg("D:/test.svg")
rr <- raster(t(volcano))
rc <- cut(rr, breaks= 10)
pols <- rasterToPolygons(rc, dissolve=T)
spplot(pols)
dev.off()
But I'd like to get smooth closed polygons not broken into small
cells.
How can a polygon be 'smooth'?
This was related to the result of example (2), which is more coarse comparing it to the result of (1).
But the region between two contours is not in general a closed polygon.
I appologize for not being precise here. My goal is to get something like this: http://drifted.in/other/contours/composition.svg which is a composition of level plots, e.g. http://drifted.in/other/contours/level_plot.svg By 'level plot' I mean the cut of the data at certain level. It is always a closed polygon (or multiple polygons) consisting of contour lines connected, if required, by border lines. For me it is preferred way over 'isoband', which doesn't include areas hidden by upper levels: http://drifted.in/other/contours/isoband.svg Please note I am not sure if this terminology (isoband, level plot, etc) is correct.
Most people with any R experience would have thought that "levelplot" referred to something like:
(Example 6.9 from Lattice, by Deepayan Sarkar to which I have only added the contour line parameter which it appears is what you were seeking.)
env <- environmental
env$ozone <- env$ozone^(1/3)
env$Radiation <- equal.count(env$radiation, 4)
fm1.env <- lm(ozone ~ radiation * temperature * wind, env)
fm2.env <- loess(ozone ~ wind * temperature * radiation, env, span = 0.75, degree = 1)
fm3.env <- loess(ozone ~ wind * temperature * radiation, env, parametric = c("radiation", "wind"), span = 0.75, degree = 2)
library("locfit") ; library(lattice)
fm4.env <- locfit(ozone ~ wind * temperature * radiation, env)
w.mesh <- with(env, do.breaks(range(wind), 50))
t.mesh <- with(env, do.breaks(range(temperature), 50))
r.mesh <- with(env, do.breaks(range(radiation), 3))
grid <- expand.grid(wind = w.mesh, temperature = t.mesh, radiation = r.mesh)
grid[["fit.linear"]] <- predict(fm1.env, newdata = grid)
grid[["fit.loess.1"]] <- as.vector(predict(fm2.env, newdata = grid))
grid[["fit.loess.2"]] <- as.vector(predict(fm3.env, newdata = grid))
grid[["fit.locfit"]] <- predict(fm4.env, newdata = grid)
png()
print(levelplot(fit.linear + fit.loess.1 + fit.loess.2 + fit.locfit ~ wind * temperature | radiation, data = grid, contour=TRUE))
dev.off()
David. >>> Are there better methods in R ? >> >> Neither of those are 'in R'! >> But you could get a long way by looking at the following >> >> ?contourLines >> ?polygon >> ?grid::grid.polygon >> >> all of which are part of R. R is a fully-fledged programming >> language and you could write SVG directly from R: using the svg device >> is limited by the steps to the R graphics primitives (see the 'R >> Internals' manual) and cairographics. >> > > Thanks a lot for detailed explanation. Now I understand it more. > > Most of contouring libraries create the list of line fragments. And this > seems to be the case also of R's 'contourLines'. > > But filling the areas requires a further post-processing (joining line > fragments, joining contours, set the correct direction to preserve holes). > And if I understand correctly, this is let to R 'libraries'. Unfortunately, > none of these two is optimal for my use case. > > If there is any hidden option or another library (implementing e.g. Marching > squares) which could produce output similar to that linked SVG file, I am > one big ear. > > Thanks, Jan > > ______________________________________________ > 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. David Winsemius Alameda, CA, USA