**Piece of K » R_EN**, and kindly contributed to R-bloggers)

In February, I participated in a hackaton organized by Thibaut Jombart at Imperial College, London, to work on visualization tools for outbreak data. This was a great time spent with great people! Thanks again, Thibaut, for organizing. I took part in the development of `epimap`

, an R package for statistical mapping. The aim of epimap is to provide tools to quickly and efficiently visualize spatial data. There is a set of functions designed to do that and you can check out the Github page for a demo.

This package also provides two functions to coerce complex objects to Spatial classes so that they can be easily included in a map.

- The
`contour2sp`

function takes a SpatialGrid object and returns contour lines as a SpatialLinesDataFrame. - The
`graph2sp`

function takes a graph (from`igraph`

package) with geolocated vertices and returns a list of Spatial objects (points and lines).

Following this post of Arthur Charpentier (who nicely plays with `rleafmap`

!), I decided to include the John Snow’s Cholera dataset in `epimap`

so it can be simply used for tests.

In this post I want to show how `epimap`

and `rleafmap`

can be combined to create fully customizable interactive maps with complex objects. The cholera dataset gives the locations of cholera deaths and the locations of water pumps in London. The maps will show the location of cholera deaths with points, the local density of deaths with colored contour lines and the location of water pumps with icons. Moreover, the pumps will be represented within a network where two pumps are connected if there are close enough.

library(rleafmap) library(epimap) data(cholera) # Create a network of pumps pump.adj <- as.matrix(dist(sp::coordinates(cholera$pumps))) pump.graph <- graph.adjacency(pump.adj < 0.003, diag = FALSE) V(pump.graph)$lat <- coordinates(cholera$pumps)[, 2] V(pump.graph)$lon <- coordinates(cholera$pumps)[, 1] # Convert death density SpatialGrid to contour SpatialLines death.cont <- contour2sp(cholera$deaths.den, nlevels = 10) # Basemap layer cdbdark.bm <- basemap("cartodb.darkmatter.nolab") # Data layers death.points <- spLayer(cholera$deaths, size = 1, fill.col = "white", fill.alpha = 0.5, stroke = FALSE) death.contour <- spLayer(death.cont, stroke.col = heat.colors(12)[cut(death.cont$level, 12)], stroke.lwd = 1.5, stroke.alpha = 1) pumps.points <- spLayer(graph2sp(pump.graph)[[1]], png = "/home/francois/water.png", png.width=31 , png.height=31) pumps.links <- spLayer(graph2sp(pump.graph)[[2]], stroke.lwd = 3, stroke.col = "white") my.ui <- ui(layers = "topright") writeMap(cdbdark.bm, death.points, death.contour, pumps.links, pumps.points, interface = my.ui)

And here is the map we get:

**leave a comment**for the author, please follow the link and comment on their blog:

**Piece of K » R_EN**.

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...