Create a ggmap with points, faces, and each facet will scale accordingly?

I want to display data points for different cities on the greyed-out map from google. Since these cities are at some distance from each other, I thought I would use a faceted plot.

Creating a map is quite simple; see image and code below. However, each face shows the same area - in this case, Greater London - as a result, points for other cities are not displayed.

Ideally, I would like every aspect to show each city the appropriate overlays. Thus, the Cardiff face will show an enlarged map of Cardiff and its data points, Birmingham will show Birmingham and its points, and so on. I tried to change various parameters like zoom and center , but I was not successful.

How can I show a different city and corresponding points in each face?

enter image description here

 require(ggmap) require(reshape) # create fake data sites <- data.frame(site = 1:6, name = c( "Royal Albert Hall", "Tower of London", "Wales Millenium Centre", "Cardiff Bay Barrage", "Birmingham Bullring", "Birmingham New Street Station" ), coords = c( "51.501076,-0.177265", "51.508075,-0.07605", "51.465211,-3.163208", "51.44609,-3.166652", "52.477644,-1.894158", "52.477487,-1.898836"), subzone = rep(c('London','Cardiff','Birmingham'), each = 2) ) # use function from reshape to split/add column sites = transform(sites, new = colsplit(coords, split = ",", names = c('lat', 'lon'))) names(sites) <- c(names(sites)[1:4], 'lat','lon') ggmap(get_googlemap(center = "London", # omitting this doesn't help scale = 2, zoom = 11, # fiddling with zoom doesn't work color = 'bw', maptype = 'roadmap', extent = 'panel', format = "png8", filename = "facet_map_test", )) + facet_wrap(~ subzone, ncol = 1) + geom_point(data = sites, aes(x = lon, y = lat), fill = "red", size = 3, colour = "black", shape = 21, alpha = 1) + theme(legend.position = "none") + theme() 
+6
source share
1 answer

Using gridExtra is probably the best way. Code:

 # getting the maps londonmap <- get_map(location = c(lon = -0.1266575, lat = 51.504575), zoom = 12) cardiffmap <- get_map(location = c(lon = -3.16493, lat = 51.45565), zoom = 13) birminghammap <- get_map(location = c(lon = -1.896497, lat = 52.477565), zoom = 14) # plotting the maps p1 <- ggmap(londonmap) + geom_point(data = sites[sites$subzone=="London",], aes(x = lon, y = lat, fill = "red", alpha = 0.8, size = 3), shape = 21) + ggtitle("London") + theme(axis.title = element_blank(), legend.position = "none", plot.margin = unit(c(0,0,0,0), "lines")) p2 <- ggmap(cardiffmap) + geom_point(data = sites[sites$subzone=="Cardiff",], aes(x = lon, y = lat, fill = "red", alpha = 0.8, size = 3), shape = 21) + ggtitle("Cardiff") + theme(axis.title = element_blank(), legend.position = "none", plot.margin = unit(c(0,0,0,0), "lines")) p3 <- ggmap(birminghammap) + geom_point(data = sites[sites$subzone=="Birmingham",], aes(x = lon, y = lat, fill = "red", alpha = 0.8, size = 3), shape = 21) + ggtitle("Birmingham") + theme(axis.title = element_blank(), legend.position = "none", plot.margin = unit(c(0,0,0,0), "lines")) # grouping the plots together in one plot grid.arrange(p1,p2,p3,ncol=1) 

Result:

enter image description here

+6
source

All Articles