[R] Masking oceans using polypath

Paul Murrell paul at stat.auckland.ac.nz
Tue Jul 16 23:42:45 CEST 2013


Hi

There are a couple of problems:

1.
Your 'outline' is much bigger than it needs to be.  For example, the 
following produces just Australia ...

outline <- map("worldHires", regions="Australia", exact=TRUE,
                plot=FALSE) # returns a list of x/y coords

2.
The outline you get still has NA values in it (the coastline of 
Australia in this database is a series of distinct lines;  I don't know 
why that is).  Fortunately, you can stitch Australia back together again 
like this ...

subset <- !is.na(outline$x)
polypath(c(outline$x[subset], NA, c(xbox, rev(xbox))),
          c(outline$y[subset], NA, rep(ybox, each=2)),
          col="light blue", rule="evenodd")

With those two changes, I get a much better result.  You may want to 
fiddle a bit more to add Tasmania and bits of PNG and Indonesia back in 
the picture OR you could replace these problems with a different 
approach and use a more sophisticated map outline via a "shapefile" (see 
the 'sp' package and the 'maptools' package and possibly the R-sig-geo 
mailing list).

Hope that helps.

Paul

On 07/16/13 23:17, Louise Wilson wrote:
> library(mapdata)
>
> image(x=110:155, y =-40:-10, z = outer(1:45, 1:30, "+"),
>
>        xlab = "lon", ylab = "lat")
>
> outline <- map("worldHires", plot=FALSE) # returns a list of x/y coords
>
> xrange <- range(outline$x, na.rm=TRUE) # get bounding box
>
> yrange <- range(outline$y, na.rm=TRUE)
>
> xbox <- xrange + c(-2, 2)
>
> ybox <- yrange + c(-2, 2)
>
> # create the grid path in the current device
>
> polypath(c(outline$x, NA, c(xbox, rev(xbox))),
>
>       c(outline$y, NA, rep(ybox, each=2)),
>
>       col="light blue", rule="evenodd")

-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/



More information about the R-help mailing list