John Snow, and Google Maps

In my previous post, I discussed how to use OpenStreetMaps (and standard plotting functions of R) to visualize John Snow’s dataset. But it is also possible to use Google Maps (and ggplot2 types of graphs).

get_london <- get_map(c(-.137,51.513), zoom=17)
london <- ggmap(get_london)

Again, the tricky part comes from the fact that the coordinate representation system, here, is not the same as the one used on Robin Wilson’s blog.

> library(maptools)
> setwd("/cholera/")
> deaths <- readShapePoints("Cholera_Deaths")
> head(deaths@coords)
coords.x1 coords.x2
0  529308.7  181031.4
1  529312.2  181025.2
2  529314.4  181020.3
3  529317.4  181014.3
4  529320.7  181007.9
5  529336.7  181006.0
> X <- deaths@coords

or, use d X_deaths.RData. So now, we have to change it

df_deaths <- data.frame(X)
df_deaths = spTransform(df_deaths,CRS("+proj=longlat +datum=WGS84"))

Here, we have the same coordinate system as the one used in Google Maps. Now, we can add a layer, with the points,

london + geom_point(aes(x=coords.x1, y=coords.x2),data=data.frame(df_deaths@coords),col="red")

Again, it is possible to add the density, as an additional layer,

london + geom_point(aes(x=coords.x1, y=coords.x2), 
geom_density2d(data = data.frame(df_deaths@coords), 
aes(x = coords.x1, y=coords.x2), size = 0.3) + 
stat_density2d(data = data.frame(df_deaths@coords), 
aes(x = coords.x1, y=coords.x2,fill = ..level.., alpha = ..level..),size = 0.01, bins = 16, geom = "polygon") + scale_fill_gradient(low = "green", high = "red",guide = FALSE) + 
scale_alpha(range = c(0, 0.3), guide = FALSE)


Cite this blog post
Arthur Charpentier (2015, February 27). John Snow, and Google Maps. Freakonometrics. Retrieved May 23, 2024, from

7 thoughts on “John Snow, and Google Maps”

  1. Salut Arthur,
    Juste une petite question technique. Pourrais-tu me dire avec quel système d’exploitation tu travailles : windows ? linux ? mac ? Et avec quelle version de R ? Je travaille usuellement avec la 3.0.2 et j’ai parfois des soucis pour installer des packages. Mais j’ai gardé une plus vielle au cas (2.15.3). Merci.

    1. en fait, c’est vraiment le bordel ! je bosse à la fois au bureau sur une vieille version de R, sur windows, et sur mon laptop sur linux, avec une version plus récente. Et c’est effectivement l’horreur !

  2. “deaths@coords”

    Error in data.frame(deaths@coords) : trying to get slot “coords” from an object (class “data.frame”) that is not an S4 object

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.