Nightlights II

October 8, 2010
By

(This article was first published on Steven Mosher's Blog, and kindly contributed to R-bloggers)

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

return(kmAtEq/kmAtLat)

}

# the above function returns a scale factor for km per degree @ a given latitude

getExtent <-function(x,halfLength=.5,LonLat) {

yMin <- max(ymin(x),LonLat[2] - halfLength)

yMax <- min(ymax(x),LonLat[2] + halfLength)

e <- extent(xMin,xMax,yMin,yMax)

return(e)

}

&nbsp;
```

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: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

Tags: