Skip to content

fill map with gradient: package?

3 messages · Paul Murrell, Thomas Steiner

#
Hi,
I'd like to fill an existing svg (or png) map with gradient colors.
In detail: The file
http://commons.wikimedia.org/wiki/File:Karte_%C3%96sterreich_Bundesl%C3%A4nder.svg
should be filled with the population density data from this table:
http://de.wikipedia.org/wiki/%C3%96sterreich#Verwaltungsgliederung
choosing the right color saturation (or whatever). The final result
should be something like this map:
http://commons.wikimedia.org/wiki/Image:Bevoelkerungsdichte_-_Oesterreich.svg
Is there a package or so for these two tasks (filling and color
density ploting)?
Thanks for your help,
Thomas
1 day later
#
Hi
Thomas Steiner wrote:
The 'grImport' package can help with getting the SVG into R (see 
http://www.jstatsoft.org/v30/i04).

First step is to convert the SVG to PostScript (I used InkScape - you 
can play around with how the text comes across, but I'm going to ignore 
that and concentrate on the map regions).

Having done that, the following code loads the map into R and draws it ...

library(grImport)
PostScriptTrace("Austria-Map-withFonts.ps", charpath=FALSE)
map <- readPicture("Austria-Map-withFonts.ps.xml")
grid.picture(map)

... (the orientation may be 90 degrees out and you may get some warnings 
about character encodings;  the former is easy to fix [see below] and 
the latter can just be ignored for now because we are ignoring the 
text).  The next code shows the breakdown of the map into separate 
"paths" ...

grid.newpage()
picturePaths(map)

... from which we can see that the regions are the first 10 paths ...

grid.newpage()
grid.picture(map[1:10], use.gc=FALSE)

At this point, you can use grImport to draw the regions with different 
fill colours, or you can just extract the x,y coordinates of the regions 
and go-it-alone.  The following code takes the latter path, setting up 
10 different colours, and drawing each region using grid.polygon().  The 
orientation is fixed by pushing a rotated viewport first ...


colours <- hcl(240, 60, seq(30, 80, length=10))
grid.newpage()
pushViewport(viewport(angle=-90),
              grImport:::pictureVP(map[1:10]))
mapply(function(p, col) {
            grid.polygon(p$x, p$y, default.units="native",
                         gp=gpar(fill=col))
        },
        regions, colours)


Hope that helps.

Paul
3 days later
#
Thanks Paul.
I'm still struggeling with some beginners issues on the ps-import
(windows troubles with installing ghostscript), but when I resolved
them I'm sure that I can use your example code which loos great to me.
Thanks a lot,
Thomas


2009/11/4 Paul Murrell <p.murrell at auckland.ac.nz>: