[R-sig-Geo] spplot: labels on maps / variables on different scales
Roger Bivand
Roger.Bivand at nhh.no
Tue Sep 2 10:56:22 CEST 2008
On Tue, 26 Aug 2008, Michael Friendly wrote:
> Edzer Pebesma wrote:
>>
>>
>> Michael Friendly wrote:
>> > Two short questions about working with maps:
>> >
>> > 1. I'm reading a shapefile with character labels for the regions (FSA).
>> > I can add the labels using plot(),
>> > but when I try the same thing using spplot(), the labels are in the
>> > wrong positions -- they all seem to be
>> > shrunk somewhat in toward the center of the map. What am I doing wrong?
>> >
>> > # this doesn't work-- labels in wrong position
>> > spplot(toronto,"FSA_NAME", colorkey=FALSE)
>> > text(coordinates(toronto), labels=as.character(toronto$FSA), cex=0.4)
>> Right: text() works with base graphics, not with lattice on which spplot
>> is built.
>>
>> Something like this should work:
>> spplot(toronto,"FSA_NAME", colorkey=FALSE,
>> sp.layout = list("sp.text", coordinates(toronto),
>> as.character(toronto$FSA), cex=0.4))
>>
> Great! Now I also know where to look to generalize this.
>> >
>> > 2. I have a bunch of attribute variables for the geographic regions, all
>> > on different scales. Id like to
>> > produce a set of comparative maps in the same figure (say with spplot())
>> > with each attribute shaded
>> > by its quantiles, e.g., 5 classes each. Do I have to precompute these
>> > first, or is there something I can do in the call
>> > to spplot() to have this done, using the variables in the
>> > SpatialPolygonsDataFrame?
>> What exactly did you mean by "all on different scales"? They have
>> different polygon structures?
> No - some of the attribute values are percents, some are quantitative &
> positively skewed, like Income. If I do
>
> spplot(toronto, c("Household.Income","Unemployed","University"))
> a single scale is applied to all three, so the two % variables are shaded
> uniformly in the lowest range.
> What I'd like is to apply a function to take each of these and recode into
> quantiles for that variable.
After a little digging around, it looks as though the plot() method for
trellis objects (pp. 202-206 in the Lattice book) provides a way to
generate a single graphic from multiple calls to spplot, something like:
p1 <- spplot(toronto, c("Household.Income"))
p2 <- spplot(toronto, c("Unemployed"))
p3 <- spplot(toronto, c("University"))
plot(p1, split=c(1,1,2,2), more=TRUE)
plot(p2, split=c(1,2,2,2), more=TRUE)
plot(p3, split=c(2,1,2,2), more=FALSE)
using at=, col.regions=, main=, etc. in each of the spplot calls as
appropriate for the selected variables. With the same col.regions= and at=
based on quantiles (perhaps floor() for the first and ceiling() for the
last), this should be pretty close visually, but with a key for each
variable.
>
> It's partly that my data variables are now in the map object and, from the
> help, I only know how to refer to
> zcol= names of these, rather than some transformations on the underlying
> data.
The alternative might be to assign new derived variables to the
Spatial*DatatFrame object, which for all intents and purposes "is" a data
frame, and spplot() them.
Roger
--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no
More information about the R-sig-Geo
mailing list