[R-sig-Geo] [R-sig-geo]: Plot spatial data with spplot and maps
Karl Ove Hufthammer
karl at huftis.org
Thu Nov 4 15:32:25 CET 2010
pelt wrote:
> I have made a plot with ssplot, using a SpatialPointsDataFrame. The
> content is quite simple, as I have 9 grid points with lon/lat
> coordinates and 9 values attached to these coordinates. They are in a
> square area of 3 by 3 gridboxes.
> I would like to lay a map from maps() over these values, but when I try
> this, the grids of the maps do not overlap with the grids I have
> already created with spplot().
You’re trying to mix ‘base’ graphics and ‘grid’ graphics, which doesn’t work.
‘spplot’ use ‘lattice’ graphics (based on ‘grid’), so you’ll have to modify
its ‘panel’ function. Here’s a very simple example.
BTW, I recommend reading the ‘lattice’ book to understand how to use ‘panel’
functions: http://lmdvr.r-forge.r-project.org/figures/figures.html
library(sp)
library(lattice)
library(maps)
library(maptools)
n=100
d=data.frame(x=rnorm(n,0,20),y=rnorm(n,0,20),z=1:n)
xl=range(d$x)
yl=range(d$y)
coordinates(d)=~x+y
spplot(d, panel=function(...) {
panel.fill("lightblue3")
wmap=map("world", fill=TRUE, plot=FALSE,
xlim=xl, ylim=yl, resolution=0)
wmap[c("x", "y")]=mapthin(wmap[c("x", "y")],1)
wmap.sp=map2SpatialPolygons(wmap, wmap$names)
sp.polygons(wmap.sp,fill="khaki", col=NA,lwd=2)
panel.pointsplot(...)
}, xlim=xl, ylim=yl )
The reason for the slow drawing is that each polygon is plotted separately,
and the map polygon also contains areas outside ‘xl’ and ‘yl’. (This is easy
enough to fix by merging and clipping the polygons.)
--
Karl Ove Hufthammer
More information about the R-sig-Geo
mailing list