I’ve modified some routines so that we are always grabbing a roughly equal area regardless of the latitude. Basically, you do this:
getLonScaleFactor <- function(lat){
kmAtEq <-111.3195
kmAtLat <- 111.41288*cos(lat*DEGREES.TO.RADIANS)-.09350*cos(3*lat*DEGREES.TO.RADIANS)+0.00012*cos(5*lat*DEGREES.TO.RADIANS)
return(kmAtEq/kmAtLat)
}
# the above function returns a scale factor for km per degree @ a given latitude
getExtent <-function(x,halfLength=.5,LonLat) {
lonAdjust<-getLonScaleFactor(LonLat[2])*halfLength
yMin <- max(ymin(x),LonLat[2] - halfLength)
yMax <- min(ymax(x),LonLat[2] + halfLength)
xMin <- max(xmin(x),LonLat[1] - lonAdjust)
xMax <- min(xmax(x),LonLat[1] + lonAdjust)
e <- extent(xMin,xMax,yMin,yMax)
return(e)
}
Simply we feed getExtent a “raster”, a point, and a “halfLength” The last parameter tells you how wide and tall your plot will be. So the default of .5 means that your “point” will be bracketed by 1/2 a degree of latitude (+- 1/2 degree) and the longitude will be scaled depending upon the latitude. At the equator, this entails 1/2 degree in each direction. Toward the pole, I adjust the width to keep the areas generally similar. Note, the underlying data is not globally complete, there are small gaps at the pole. In a better implementation of “getExtent” I would wrap at the extrema. Then I played with colors. Arrg I hate doing color by number:
And by changing the call to “getExtent() I can request a grid that only looks out .25 degrees in latitude and longitude.
R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



Zero Inflated Models and Generalized Linear Mixed Models with R.
Zuur, Saveliev, Ieno (2012).